是否有REST API反向代理库可注入请求标头?

时间:2019-04-24 09:35:58

标签: python python-3.x python-requests

我正在设置一个小的Python服务来充当REST API反向代理,但希望有一些可用的库来帮助加快此过程。

需要能够运行一个函数来计算将请求代理到后端时作为请求标头注入的变量。

就目前情况而言,我有一个更简单的脚本来执行该函数以获取变量并将其注入Nginx配置文件中,然后通过信号强制Nginx热重载,但是尝试删除此依赖关系应该是相当简单的任务。

将falcon用作侦听器并将其与另一种注入和转发请求的方法结合起来是一种好方法吗?

感谢阅读。

编辑:正在阅读https://aiohttp.readthedocs.io/en/stable/,因为这似乎是正确的方向。

1 个答案:

答案 0 :(得分:0)

感谢猎鹰的人,这是现在可以接受的答案!

import io

import falcon
import requests


class Proxy(object):
    UPSTREAM = 'https://httpbin.org'

    def __init__(self):
        self.session = requests.Session()

    def handle(self, req, resp):
        headers = dict(req.headers, Via='Falcon')
        for name in ('HOST', 'CONNECTION', 'REFERER'):
            headers.pop(name, None)

        request = requests.Request(req.method, self.UPSTREAM + req.path,
                                   data=req.bounded_stream.read(),
                                   headers=headers)
        prepared = request.prepare()
        from_upstream = self.session.send(prepared, stream=True)

        resp.content_type = from_upstream.headers.get('Content-Type',
                                                      falcon.MEDIA_HTML)
        resp.status = falcon.get_http_status(from_upstream.status_code)
        resp.stream = from_upstream.iter_content(io.DEFAULT_BUFFER_SIZE)


api = falcon.API()
api.add_sink(Proxy().handle)