Pythons请求库从URL中删除附加的问号

目标

提出http://example.com/page?使用要求requests.get()

问题

问号(“?”),将自动从请求剥离,如果它是在URL中的最后一个字符(如http://example.com/page?1http://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将简单地忍受它。


以上是Pythons请求库从URL中删除附加的问号的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>