1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
| import json from base64 import b64encode, b64decode import time import urllib3 from flask import Flask, request, jsonify
urllib3.disable_warnings() app = Flask(__name__)
@app.route("/proxy", methods=["POST"]) def proxy_request(): try: request_data = request.get_json()
body = b64decode(request_data.get('body', '')).decode() if 'body' in request_data else None, required_fields = ['method', 'url'] if not all(field in request_data for field in required_fields): raise ValueError(f"请求必须包含字段: {required_fields}")
kwargs = { 'method': request_data['method'].upper(), 'url': request_data['url'], 'headers': request_data.get('headers', {}), 'body': body, 'timeout': urllib3.Timeout(connect=5.0, read=10.0) }
http = urllib3.PoolManager(cert_reqs="CERT_NONE") start_time = time.time() response = http.request(**kwargs) elapsed = time.time() - start_time
proxy_response = { "status_code": response.status, "headers": {k.lower(): v for k, v in response.headers.items()}, "body": b64encode(response.data).decode('utf-8') if response.data else "", "elapsed": f"{elapsed:.3f}s" }
return jsonify(proxy_response)
except Exception as e: proxy_response = { "status_code": 500, "headers": {}, "body": json.dumps({"error": str(e)}), "elapsed": "0s" } return jsonify(proxy_response)
if __name__ == "__main__": app.run(host="0.0.0.0", port=9000, debug=True)
|