python:强制aiohttp不规范url

时间:2020-04-10 12:25:22

标签: python-asyncio python-3.7 aiohttp

我使用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

1 个答案:

答案 0 :(得分:1)

aiohttp使用yarl进行URL处理。

session.get('http://example.com')session.get(yarl.URL('http://example.com'))

一样好

您可以使用encoded=Trueyarl.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()) 
相关问题