httpx/URL 正在更改原始 URL

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

如果我之前的 URL 中有 %20,那么代码中它会以 + 结尾。

url='http://www.example.com?param=a%20b'
url=URL(url)
url=url.copy_merge_params(params={})

在 QueryParams.str 中,它调用 urlencode() 而不需要任何其他参数。有没有办法停止这种行为,只需要操作 URL,而不使用 AsyncClient.request() 的任何参数?

asynchronous url quoting httpx
1个回答
0
投票

据我所知,我认为您可以从

URL
行为类进行覆盖,或者您也可以通过对查询参数进行编码并将
"+"
字符替换为
"%20"
的值来手动完成,以保留原始 URL。之后,您可以拨打
AsyncClient.request()

提出请求
import httpx
from urllib.parse import urlencode, urlparse, urlunparse

# you can also use parameters to preserve other params value
# just in case if you might need to update with a value other than "%20"
def custom_encode_params(params, new_value):
    encoded_params = urlencode(params)
    return encoded_params.replace("+", new_value)

base_url = "http://example.com"
params = {"param": "a b"}

encoded_params = custom_encode_params(params, "%20")
parsed_url = urlparse(base_url)
new_url = urlunparse(parsed_url._replace(query=encoded_params))

# adjust with your code that uses `AsyncClient.request()` method
client = httpx.Client()
response = client.get(new_url)
print(response.url)

URL 附加过程确实是手动完成的,这种可能性不会根据您的需要涵盖一些其他边缘情况。希望这有帮助

© www.soinside.com 2019 - 2024. All rights reserved.