如果我之前的 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() 的任何参数?
据我所知,我认为您可以从
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 附加过程确实是手动完成的,这种可能性不会根据您的需要涵盖一些其他边缘情况。希望这有帮助