Flask和requests做一个简单的请求代理

有的时候,我们需要做一些简单的代理工作,比如,把一个内部系统,通过已有的鉴权方式暴露出去。

代码如下:

# 代理接口
import logging

import requests
from flask import Blueprint, request, Response

proxy_bp = Blueprint("proxy_bp", __name__, url_prefix="/proxy")


BASE_URL = "代理目标地址"


def get_token():
    return "已有系统的token获取"


@proxy_bp.route("/<path:url>", methods=["GET", "POST", "PUT", "DELETE", "OPTIONS"])
def proxy(url):
    url = "{}/{}?{}".format(BASE_URL, url, request.query_string.decode("utf8"))
    method = request.method
    json_body = request.get_json()
    headers = {"Authorization": "Bearer {}".format(get_token())}

    resp = requests.request(method, url, json=json_body, headers=headers)
    logging.info("proxy got result: %s", resp.text)
    content_type = resp.headers.get("Content-Type", "text/html")

    return Response(resp.text, status=resp.status_code, content_type=content_type)

当然,这个只支持JSON,不过改成支持form也不难。


微信公众号
关注公众号,获得及时更新

更多文章
  • MySQL Boolean类型的坑
  • pip freeze是魔鬼
  • 一个feed流系统的演进
  • Android 使用view binding
  • 系统调用的过程
  • MySQL charset不同导致无法使用索引的坑
  • 微服务的缺点
  • 远程工作一周有感
  • Python中的并发控制
  • KVM spice协议在高分屏上的分辨率问题
  • 计算机中的权衡(trade-off)
  • [声明]本站所有文章禁止转载
  • Golang不那么蛋疼的sort
  • Flutter给Android应用签名
  • 使用Gitea+Drone打造自己的CI/CD系统