使用flask实现一个简单的代理服务

背景:

有一些客户的服务是我本地windows电脑开vpn之后才能访问的。为了让公司内网的别的电脑不开vpn也能正常请求客户的接口,方便调试,所以使用我的windows电脑实现一个代理的功能。

原理简单画个图:

功能简单直接上代码:

复制代码
from flask import Flask, request, Response
import requests

app = Flask(__name__)


@app.route('/<path:dummy>', methods=['GET', 'POST'])
def proxy(dummy):

    host = request.host
    print("请求host:", host)

    if host == "proxy_aaaaaa.cn:5000":
        proxy_service = "https://aaaaaa.cn"
        pass

    elif host == "proxy_bbbbbb.cn:5000":
        proxy_service = "http://bbbbbb.cn"
        pass

    elif host == "proxy_cccccc.com:5000":
        proxy_service = "https://cccccc.com"

    # 获取请求 URL
    url = f'{proxy_service}/{dummy}'

    print(f"真实请求的url:{url}")
    print(f"真实请求的method:{request.method}")

    params = request.args

    print(f"真实请求的url字符串传参:{dict(request.args)}")

    form_data = dict(request.form)
    print("真实请求的form_data传参:", form_data)

    # 转发请求到目标服务器, 这里只代理了form_data传参和url查询字符串传参, 如果是json传参可以加上
    response = requests.request(
        method=request.method,
        url=url,
        params=params,
        data=form_data,
    )

    # 将目标服务器的响应返回给客户端
    print(f"真实响应status_code: {response.status_code}")
    return Response(response.content, content_type=response.headers['Content-Type'], status=response.status_code)


if __name__ == '__main__':
    app.run(host="0.0.0.0", port=5000, debug=False)

上面是代理的客户的三个服务, 我通过我本机的hosts文件区分访问的哪个真实的服务,hosts文件windows机器一般在 C:\Windows\System32\drivers\etc 这个位置

本地hosts配置:

复制代码
192.168.9.243	proxy_aaaaaa.cn	proxy_bbbbbb.cn	 proxy_cccccc.com

请求的时候把原始的域名换成代理的域名就好了:

复制代码
    # HOST = "http://aaaaaa.cn"            # 把客户原始的域名换成代理的域名就好了
    HOST = "http://proxy_aaaaaa.cn"
相关推荐
玄同7653 分钟前
Python 自动发送邮件实战:用 QQ/163 邮箱发送大模型生成的内容
开发语言·人工智能·python·深度学习·机器学习·邮件·邮箱
岱宗夫up4 分钟前
神经网络(MLP)在时间序列预测中的实践应用
python
我的xiaodoujiao5 分钟前
使用 Python 语言 从 0 到 1 搭建完整 Web UI自动化测试学习系列 46--撰写 README项目说明文档文件
python·学习·测试工具·pytest
Olamyh5 分钟前
【手搓 ReAct Agent:告别框架,回归本质】
人工智能·python
数研小生8 分钟前
Python自然语言处理:NLTK与Gensim库
开发语言·python·自然语言处理
love530love17 分钟前
Windows 下 GCC 编译器安装与排错实录
人工智能·windows·python·gcc·msys2·gtk·msys2 mingw 64
jbtianci31 分钟前
Spring Boot管理用户数据
java·spring boot·后端
程序员ken38 分钟前
深入理解大语言模型(8) 使用 LangChain 开发应用程序之上下文记忆
人工智能·python·语言模型·langchain
那我掉的头发算什么1 小时前
【Mybatis】Mybatis-plus使用介绍
服务器·数据库·后端·spring·mybatis
wazmlp0018873691 小时前
第五次python作业
服务器·开发语言·python