通过flask可以实现,具体代码如下:
import os
import sys
import threading
import webbrowser
import time
import requests
from urllib.parse import urljoin, quote
from flask import Flask, request, jsonify, send_from_directory, Response
app = Flask(__name__)
@app.route('/v1/<path:subpath>', methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'])
def proxy(subpath):
# 定义目标URL
target_url = urljoin('https://dashscope.aliyuncs.com/compatible-mode/v1/', quote(subpath))
# 转发请求到目标URL
headers = {key: value for (key, value) in request.headers if key != 'Host'} # 移除原始 Host 头
headers['Host'] = 'dashscope.aliyuncs.com' # 修改为目标服务器的域名
try:
# 转发请求到目标URL
response = requests.request(
method=request.method,
url=target_url,
headers=headers, # 使用修改后的 headers
data=request.get_data(),
allow_redirects=False,
stream=True, # 启用流式传输
timeout=20 # 设置超时时间为10秒
)
# 记录请求和响应数据到日志文件
with open('proxy_log.txt', 'a') as log_file:
log_file.write(f"Request to: {target_url}\n")
log_file.write(f"Request method: {request.method}\n")
log_file.write(f"Request headers: {dict(request.headers)}\n")
log_file.write(f"Request data: {request.get_data(as_text=True)}\n") # 记录发送的数据
log_file.write(f"Response status: {response.status_code}\n")
log_file.write(f"Response headers: {dict(response.headers)}\n")
log_file.write("\n") # 添加空行分隔不同请求的日志
# 返回目标URL的响应
return Response(
response.iter_content(chunk_size=1024), # 流式输出响应内容
status=response.status_code,
headers=response.headers.items()
)
except requests.exceptions.RequestException as e:
# 记录异常到日志文件
with open('proxy_log.txt', 'a') as log_file:
log_file.write(f"Error during request to {target_url}: {e}\n")
log_file.write("\n")
# 返回错误响应
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
# 启动Flask应用的线程
app.run(host='0.0.0.0', port=5000) 网友回复


