使用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"
相关推荐
小_太_阳21 分钟前
Scala_【2】变量和数据类型
开发语言·后端·scala·intellij-idea
直裾24 分钟前
scala借阅图书保存记录(三)
开发语言·后端·scala
老刘莱国瑞29 分钟前
STM32 与 AS608 指纹模块的调试与应用
python·物联网·阿里云
星就前端叭1 小时前
【开源】一款基于Vue3 + WebRTC + Node + SRS + FFmpeg搭建的直播间项目
前端·后端·开源·webrtc
一只敲代码的猪1 小时前
Llama 3 模型系列解析(一)
大数据·python·llama
Hello_WOAIAI2 小时前
批量将 Word 文件转换为 HTML:Python 实现指南
python·html·word
winfredzhang2 小时前
使用Python开发PPT图片提取与九宫格合并工具
python·powerpoint·提取·九宫格·照片
小林coding2 小时前
阿里云 Java 后端一面,什么难度?
java·后端·mysql·spring·阿里云
AI理性派思考者2 小时前
【保姆教程】手把手教你在Linux系统搭建早期alpha项目cysic的验证者&证明者
后端·github·gpu
矩阵推荐官hy147622 小时前
短视频矩阵系统种类繁多,应该如何对比选择?
人工智能·python·矩阵·流量运营