Существует ли библиотека обратного прокси-сервера REST API для ввода заголовков запросов?

#python #python-3.x #python-requests

#python #python-3.x #python-запросы

Вопрос:

Я настраиваю небольшую службу Python для работы в качестве обратного прокси-сервера REST API, но надеюсь, что есть некоторые доступные библиотеки, которые помогут ускорить этот процесс.

Необходимо иметь возможность запускать функцию для вычисления переменной для ввода в качестве заголовка запроса, когда запрос передается через серверную часть.

В нынешнем виде у меня есть более простой скрипт для выполнения функции получения переменной и ввода ее в конфигурационный файл Nginx, а затем принудительной перезагрузки Nginx с помощью сигналов, но попытка удалить эту зависимость для того, что должно быть довольно простой задачей.

Было бы хорошим подходом использовать falcon в качестве слушателя и объединить его с другим подходом для ввода и пересылки запросов?

Спасибо за чтение.

Редактировать: читал https://aiohttp.readthedocs.io/en/stable / поскольку это кажется правильным направлением.

Ответ №1:

Благодаря кому-то из falcon, теперь это принятый ответ!

 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)