Python请求:URL编码不一致?

时间:2017-10-07 20:33:13

标签: python json python-requests url-encoding

更新 事实证明,Instagram graphql(非官方)API的响应不一致,这需要对某些ID进行身份验证,但对于同一端点则不需要进行身份验证。

我正在针对Instagram graphql端点发出GET请求。对于一些查询,我通过Python请求模块获得的JSON响应与我通过浏览器获得的相同查询不一致。

例如,此URL返回包含10个用户的JSON对象:

https://www.instagram.com/graphql/query/?variables=%7B%22shortcode%22%3A+%22BYRWPzFHUfg8r_s9UMtd6BtoI01RPGmviXaskI0%22%2C+%22first%22%3A+10%7D&query_id=17864450716183058

但是当我通过请求模块请求相同的URL时:

import requests

url = 'https://www.instagram.com/graphql/query/?variables=%7B%22shortcode%22%3A+%22BYRWPzFHUfg8r_s9UMtd6BtoI01RPGmviXaskI0%22%2C+%22first%22%3A+10%7D&query_id=17864450716183058'
response = requests.get(url)

返回的值,即response.text{"data": {"shortcode_media": null}, "status": "ok"},有点空响应,我想这意味着媒体ID不匹配。

作为仔细检查,将原始URL与最终响应的URL进行比较的测试成立,表明请求模块不会以任何方式更改URL:

>>> response.url == url
True

这仅适用于BYRWPzFHUfg8r_s9UMtd6BtoI01RPGmviXaskI0等长媒体ID。对于较短的ID,例如BZx5Zx9nHwS请求模块返回的响应与通过浏览器按预期返回的响应相同。

而不是ID的长度,我认为它可能是ID中的特殊字符,其编码方式不同,例如下划线。我尝试使用%5F进行编码,但这两种方法都没有用。

有什么想法吗?它可以是请求模块中的错误吗?

0 个答案:

没有答案