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

    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)

    Написал по памяти и не проверял, могут быть опечатки, но логика такая.
    Ответ написан
    Комментировать