Pythons请求库从URL中删除附加的问号
目标
提出http://example.com/page?使用要求requests.get()
问题
问号(“?”),将自动从请求剥离,如果它是在URL中的最后一个字符(如http://example.com/page?1和http://example.com/page?!工作,http://example.com/page?确实没有)
示例代码
import requests
endpoint = "http://example.com/page?"
r = requests.get(endpoint)
print(r.url) # -> "http://example.com/page"
assert r.url == endpoint # Raises AssertionError
题
在不修改库的情况下,是否有可能到达预期的端点?欢迎预期的解决方案(如果存在)和变通方法。
谢谢!
回答
这是不是可能与requests库。传入的 URLrequests被解析urllib3.util.url.parse_url()为单独的部分:
scheme
auth
host
port
path
query
fragment
scheme
auth
host
port
path
query
fragment
获取queryURL 部分的逻辑假定查询字符串在 之后开始?,但由于问号之后没有任何内容,因此它给出了一个空白query。当您打印时,该 URL 将被重建为一个字符串r.url。这就是 URL 没有尾随问号的原因。
不过,我发现您正在寻找的行为是可能的urllib.request。下面是一个例子:
我已将请求括在 a 中,try/except因为如果您尝试获取的页面给出 404,urllib则会引发错误,在那里requests将简单地忍受它。