@fantom0005

Как передать запрос на другой URL?

Здравствуйте. Я использую сервер Tornado. Суть в том, что фронт посылал на сторонний сервис запрос по заданному URl. Теперь мне нужно реализовать Handler, на который присылается этот запрос и этот handler должен передать запрос по нужному url. Т.е. нужно реализовать посредника, чтобы фронт слал запросы только на мой сервер, а сервер уже по нужным сервисам. Суть в том, что нужно на заданный url передать все headers, cookies и тело запроса.
Как мне это реализовать?
Спасибо.
  • Вопрос задан
  • 392 просмотра
Пригласить эксперта
Ответы на вопрос 4
vladkozlovski
@vladkozlovski
Inventor. Rebel. Entrepreneur.
Пример, как это можно сделать на aiohttp/python3.5:

from aiohttp import web, ClientSession

class ProxyHandler(web.View):

    BAD_REQUEST_HEADERS = ['host', 'accept-encoding']
    BAD_RESPONSE_HEADERS = ['content-encoding', 'transfer-encoding']

    async def get(self):
        url = request.GET.get('url')

        request_headers = []
        # убиваем "вредные" залоговки запроса
        for key, value in request.headers.items():
            if key.lower() in self.BAD_REQUEST_HEADERS:
                continue
            response_headers.append(key, value)

        with ClientSession() as session:
            async with session.get(url, headers=request_headers) as response:

                response_headers = []
                # убиваем "вредные" залоговки ответа
                for item in response.headers:
                    key, value = item
                    if key.lower() in self.BAD_RESPONSE_HEADERS:
                        continue

                    response_headers.append((key, value))

                body = await response.read()
                return web.Response(body=body, headers=response_headers, status=response.status)

Написал по памяти и не проверял, могут быть опечатки, но логика такая.
Ответ написан
Комментировать
@dmtrrr
Backend developer
А в чем проблема? Используйте библиотеку requests.
Ответ написан
Комментировать
MAKAPOH
@MAKAPOH
многостаночник
Судя по документации вам нужен AsyncHTTPClient. Необходимые параметры ожно задать через объект Request передаваемый в метод fetch. Попробуйте.
Ответ написан
Комментировать
@Stqs
senior software developer
похоже вам нужен реверс-прокси (например https://www.nginx.com/resources/admin-guide/revers...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы