此函数是一个通过 8080 端口接收外部请求的 HTTP 服务
from flask import Flask, request, Response
import requests
app = Flask(__name__)
# 目标服务器地址
TARGET_URL = 'http://10.240.230.64:8000'
@app.route('/', methods=['GET', 'POST', 'PUT', 'DELETE', 'PATCH'])
def proxy():
global TARGET_URL
url = f"{TARGET_URL}"
headers = {
# 从原始请求中转发这些头部信息
'Host': request.host,
'X-Real-IP': request.remote_addr,
'X-Forwarded-For': request.headers.get('X-Forwarded-For', request.remote_addr),
'X-Forwarded-Proto': request.scheme,
'Content-Type': request.headers.get('Content-Type', ''),
}
# 如果原始请求是WebSocket升级请求,则设置相应的头部
if 'Upgrade' in request.headers and request.headers['Upgrade'].lower() == 'websocket':
headers.update({
'Connection': 'Upgrade',
'Upgrade': request.headers['Upgrade']
})
# 根据原始请求的方法,发送相应的请求到目标服务器
resp = requests.request(
method=request.method,
url=url,
headers=headers,
data=request.get_data(),
cookies=request.cookies,
allow_redirects=False)
# 构建响应,将目标服务器的响应内容转发回客户端
excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
headers = [(name, value) for (name, value) in resp.raw.headers.items()
if name.lower() not in excluded_headers]
response = Response(resp.content, resp.status_code, headers)
return response
if __name__ == '__main__':
app.run(debug=False, port=8080)
做一个通用服务,实现同样的代理功能