python:强制aiohttp不规范url

问题描述 投票:1回答:1

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

python-asyncio python-3.7 aiohttp
1个回答
0
投票

[aiohttp使用yarl进行URL处理。

[session.get('http://example.com')session.get(yarl.URL('http://example.com'))]一样好>

您可以使用yarl.URL禁用encoded=True的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()) 
© www.soinside.com 2019 - 2024. All rights reserved.