我使用aiohttp发送请求,如下所示:
async with ClientSession() as session:
res = await session.get("http://0.0.0.0:8000/./")
当我像这样使用python启动http服务器时:
python3 -m http.server
我看到路径已规范化,即服务器收到以下请求:
GET / HTTP/1.1" 200
如何禁用此规范化,以强制执行类似urrlib的行为,例如urllib.request.urlopen("http://0.0.0.0:8000/./")
导致以下请求:
GET /./ HTTP/1.1
。
答案 0 :(得分:1)
aiohttp
使用yarl进行URL处理。
一样好
session.get('http://example.com')
和session.get(yarl.URL('http://example.com'))
您可以使用encoded=True
为yarl.URL禁用URL编码,但必须注意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())