python - 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
获取query
URL 部分的逻辑假设查询字符串在 之后开始?
,但由于问号之后没有任何内容,因此它给出了空白query
。然后,当您打印时,该 URL 将被重构为字符串r.url
。这就是 URL 没有尾随问号的原因。
不过,我发现您正在寻找的行为是可能的urllib.request
。这是一个例子:
import urllib.request, urllib.error
try:
response = urllib.request.urlopen("http://example.com/page?")
print(response.url) # -> http://example.com/page?
except urllib.error.HTTPError as e:
print(e.url) # -> http://example.com/page?
print(e.code) # -> 404
我已将请求包围在 a 中,try/except
因为如果您尝试获取的页面给出 404,urllib
则会引发错误,而在哪里requests
会简单地忍受它。
推荐阅读
- javascript - Aframe glTF 不显示
- php - 两个链接随机php
- flutter - Flutter 调试与发布版本
- javascript - 如何解决typeError,猫鼬?
- asp.net-core-mvc - 如何在多个视图中重用 html 代码?
- sql-server - SQL Server:如何在链接服务器查询中的子查询中使用变量
- javascript - 如何检查 Json Doc 是否具有 Node JS 中的所有必需键
- python - 您如何创建前三个字母为“the”且没有重复的所有单词的列表并排序
- node.js - 如何为使用 passport.js 登录的“已确认”用户添加新条件?
- python - 如何使用函数更改全局变量