python: заставить aiohttp не нормализовать URL - PullRequest
1 голос
/ 10 апреля 2020

Я использую aiohttp для отправки запроса следующим образом:

async with ClientSession() as session: 
      res = await session.get("http://0.0.0.0:8000/./") 

Когда я запускаю http-сервер, используя python, например так: python3 -m http.server

Я вижу, что путь нормализуется, т. е. сервер получает следующий запрос: GET / HTTP/1.1" 200

Как отключить эту нормализацию, чтобы принудить поведение, например, в urrlib, например, где urllib.request.urlopen("http://0.0.0.0:8000/./") приводит к следующему запросу: GET /./ HTTP/1.1.

1 Ответ

1 голос
/ 11 апреля 2020

aiohttp использует ярл для обработки URL.

session.get('http://example.com') работает так же, как session.get(yarl.URL('http://example.com'))

Вы можете отключить URL кодирование для yarl.URL с encoded=True, но вы должны позаботиться о правильности URL.

например

import asyncio
import yarl
import aiohttp

async def test():
    url = yarl.URL('https://stackoverflow.com/./', encoded=True)
    async with aiohttp.ClientSession() as session:
        async with session.get(url, allow_redirects=False) as resp:
            print(resp.url)
asyncio.run(test()) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...