我最近观察到,对于Instagram的某些cdn网址,GET请求提供了> 400响应。
https://scontent.cdninstagram.com/t51.2885-15/26184672_169643143794471_5913317750591193088_n.jpg
如果我从本地的相同代码中尝试相同的网址,则可以使用。那么,它是否阻止按请求的IP地址传递内容?
答案 0 :(得分:3)
因为400错误可以解释为:
网址无效
错误请求
请求主机名无效。
由于语法格式错误,服务器无法理解请求。
您可以尝试:
然后重试再次获取数据。
显然这不是由于缓存或cookie,
请注意,在Instagram的特定情况下,根据this issue,400 error
也可能意味着:
{ "meta": { "error_type": "OAuthAccessTokenException", "code": 400, "error_message": "The access_token provided is invalid." } }
你可能还会注意到the rate limit documentation时的最大值。速率限制达到Instagram将提升429 error
,并从same source,
如果我们使用您的应用检测到某人的垃圾行为,您也可能会收到HTTP响应代码为400(错误请求)的回复。这些错误与速率限制无关。
所以我最后的建议是评估你的制作服务器是否可以被Instagram视为"垃圾邮件服务器" (因为请求太多)
在这种情况下,您仍可以尝试review your app并获取访问令牌。但请记住,如果您的应用已经过审核,您仍然会遇到此全局速率限制:
应用全局速率限制,包括由a发出的所有API调用 在1小时的滑动窗口中,每个访问令牌的应用程序,无论如何 特定的终点。费率限制也适用于无效或格式错误 要求。
Sandbox 500 /小时
现场5000 /小时
答案 1 :(得分:1)
您可能希望使用适当的用户代理,接受,接受编码,接受语言以及if-modified-since和缓存控制字段发送真正的http标头。
通过这种方式,您将模拟浏览器执行的相同请求并处于完全相同的情况。
编辑: 鉴于用于测试的2台机器位于不同的国家(和网络),可能仅仅是由于网络可靠性的差异。
您还应该考虑到,由于内容是在CDN后面托管,您的2个程序可能会遇到不同的服务器。 (所以,再次,可靠性的差异)。
最后,他们可能会在检测到机器人而非人类用户的情况下暂时阻止您的流量。
如果从“被阻止”的机器手动浏览IG会发生什么?你检查了不同的网址吗?
如果它适用于浏览器而不是您的程序,那是因为您的程序没有发送所有必需的标题。 (也许“Referer”标题也是?)。