如何从urllib3响应中获取包含编码字段的完整URL?
问题解决:从urllib3响应中获取带编码参数的完整URL
urllib3 的 resp.geturl() 方法只会返回你传入的基础URL,不会自动拼接请求中fields参数生成的查询字符串。要获取带编码参数的完整URL,有两种可行方案:
方案1:手动拼接URL与参数(推荐)
在发送请求前,用urllib.parse.urlencode()将fields编码为查询字符串,再手动拼接到基础URL后。这样既能发送正确的请求,也能直接拿到完整URL:
import urllib3 from urllib.parse import urlencode http = urllib3.PoolManager() base_url = "https://httpbin.org/get" fields = {"hello": "world"} # 编码参数并拼接成完整URL full_url = f"{base_url}?{urlencode(fields)}" resp = http.request("GET", full_url) # 此时resp.geturl()会返回完整带参URL print(resp.geturl()) # 输出:https://httpbin.org/get?hello=world
方案2:从请求对象中获取实际发送的URL
如果不想提前拼接,可以通过查看resp关联的请求对象属性获取实际URL。不过这种方式依赖urllib3内部实现,稳定性不如方案1:
import urllib3 http = urllib3.PoolManager() resp = http.request( "GET", "https://httpbin.org/get", fields={"hello": "world"} ) # 获取实际发送的带参URL actual_url = resp._request_url print(actual_url) # 输出:https://httpbin.org/get?hello=world
注意:方案2中
_request_url是urllib3的内部属性,未来版本可能变动,生产环境优先使用方案1。
内容的提问来源于stack exchange,提问作者Michael Dorner
相关产品推荐
相关产品推荐

