更新 事实证明,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进行编码,但这两种方法都没有用。
有什么想法吗?它可以是请求模块中的错误吗?