【发布时间】:2019-12-13 09:14:03
【问题描述】:
我有一个带有 date_start 和 date_end 查询字符串参数的 RESTful API。 API 文档指出请求应具有一种 ISO 字符串中的日期时间,例如:2019-06-15T00:22:55。设置日期范围如下所示:
https://path/to/api?start_date=2019-06-15T00:22:55&end_date=2019-08-05T19:55:33
但是,Python 请求通过想要转义冒号 (:) 来破坏它,将它们替换为 %3A,从而导致
https://path/to/api?start_date=2019-06-15T00%3A22%3A55&end_date=2019-08-05T19%3A55%3A33
遗憾的是,API 不将其视为可溶参数。
当我从 Postman 运行 URL 时,该格式不会被破坏。但是,尝试使用通常令人惊叹的 Requests 库将我的应用程序连接到 API 时,它会进行字符串转义转换。根据请求文档的建议,我在 payload 样式的键值对中传递参数,如下所示:
info_id = 'abcXYZ1234'
url = 'path/to/sandbox'
start = '2019-06-15T00:00:00'
end = '2019-07-15T00:00:00'
payload = {'info_id': info_id, 'start_date': start, 'end_date': end}
r = requests.get(url, params=payload)
info = r.json()
如何防止请求转义冒号?
【问题讨论】:
-
您是否尝试在 url -
requests.get('https://path/to/api?start_date=2019-06-15T00:22:55&end_date=2019-08-05T19:55:33)中直接使用此值? -
好问题 - 不,我在参数键值对中使用它。我会更新的。
-
当您将字符串或字节分配给参数时, 也应该有效 - 如@Saritus 答案中所示。
标签: python get python-requests