使用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"
相关推荐
q***73552 分钟前
删除文件夹,被提示“需要来自 TrustedInstaller 的权限。。。”的解决方案
android·前端·后端
w***4811 小时前
Python中的简单爬虫
爬虫·python·信息可视化
z***56562 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
جيون داد ناالام ميづ2 小时前
Spring Boot 核心原理(五):配置管理怎么玩?从基础到多环境再到配置中心
java·spring boot·后端
_小九2 小时前
【开源】耗时数月、我开发了一款功能全面【30W行代码】的AI图床
前端·后端·开源
疯狂的程序猴2 小时前
完整指南:iPhone崩溃日志查看与分析方法及低内存崩溃处理
后端
voidmort2 小时前
web3.py 简介:面向 Python 开发者的以太坊
开发语言·python·web3.py
后台开发者Ethan3 小时前
LangGraph 的持久化
python·langgraph
秧歌star5193 小时前
PageHelper 分页失效原因分析与正确实践
后端
疯狂的程序猴3 小时前
苹果iOS应用签名与上架App Store完整指南包括注意事项
后端