我正在尝试通过分页处理API响应。第一页提供了到达下一个标记的分页标记,但是当我尝试将其反馈回方法的params
参数时,requests.get
它似乎以错误的方式对标记进行了稍微编码。
我尝试检索下一页(使用response
第requests.get
一种方法的输出):
# Initial request
response = requests.get(url=url, headers=headers, params=params)
params.update({"paginationToken": response.json()["paginationToken"]})
# Next page
response = requests.get(url=url, headers=headers, params=params)
失败,状态为500:内部服务器错误和消息 Padding is invalid and cannot be removed.
分页令牌示例: gyuqfh%2bqyNrV9SI1%2bXulE6MXxJgb1VmOu68eH4YZ6dWUgRItb7yJPnO9bcEXdwg6gnYStBuiFhuMxILSB2gpZCLb2UjRE0pp9RkDdIP226M%3d
如果仔细查看,尤其是在'%'符号周围,的url
属性response
似乎会显示稍有不同的标记:https://www.wikiart.org/en/Api/2/DictionariesByGroup?group=1&paginationToken=gyuqfh%252bqyNrV9SI1%252bXulE6MXxJgb1VmOu68eH4YZ6dWUgRItb7yJPnO9bcEXdwg6gnYStBuiFhuMxILSB2gpZCLb2UjRE0pp9RkDdIP226M%253d
例如,分页令牌和url以不同的结尾:226M%3d
和226M%253d
。当我手动复制url的第一部分并添加正确的分页令牌时,它确实会在浏览器中检索信息。
我是否缺少在将request.get
参数反馈回新请求之前应将其应用于参数的某种编码?
没错,这是某种形式的编码,确切地说是百分比编码。它通常用于编码URL。很容易解码:
from urllib.parse import unquote
pagination_token="gyuqfh%252bqyNrV9SI1%252bXulE6MXxJgb1VmOu68eH4YZ6dWUgRItb7yJPnO9bcEXdwg6gnYStBuiFhuMxILSB2gpZCLb2UjRE0pp9RkDdIP226M%253d"
pagination_token = unquote(pagination_token)
print(pagination_token)
输出:
gyuqfh%2bqyNrV9SI1%2bXulE6MXxJgb1VmOu68eH4YZ6dWUgRItb7yJPnO9bcEXdwg6gnYStBuiFhuMxILSB2gpZCLb2UjRE0pp9RkDdIP226M%3d
但是我希望这是您的问题的一半,请使用请求会话对象https://requests.readthedocs.io/en/master/user/advanced/#session-objects发出请求,因为最有可能的cookie是与要与分页令牌一起使用的请求一起发送。由于网站当前关闭,我无法确定。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句