通过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)
网友回复