Instagram 是不是会阻止来自某些 IP 的 CDN URL 请求?

Posted

技术标签:

【中文标题】Instagram 是不是会阻止来自某些 IP 的 CDN URL 请求?【英文标题】:Does Instagram Block CDN URL requests from Some IPs?Instagram 是否会阻止来自某些 IP 的 CDN URL 请求? 【发布时间】:2018-01-08 11:34:56 【问题描述】:

我最近观察到,对于 instagram 的某些 cdn url,GET 请求给出 >400 响应。

https://scontent.cdninstagram.com/t51.2885-15/26184672_169643143794471_5913317750591193088_n.jpg

如果我从本地的相同代码尝试相同的 url,它会起作用。那么,它是否会阻止按请求的 IP 地址传递内容?

【问题讨论】:

尝试根据您的请求设置一个已知的用户代理,也许... 是的,试过了。不起作用。我猜它是基于 IP 的,因为它适用于其他 IP。 【参考方案1】:

因为 400 错误可以解释为:

无效的网址

错误请求

请求主机名无效。

由于语法错误,服务器无法理解请求。

你可以试试:

清除浏览器 cookie 清除您的 DNS 缓存 清除浏览器缓存

然后重试再次获取数据。


显然不是因为缓存或cookies,

所以请注意,在 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 并获取访问令牌。但请记住,如果您的应用经过审核,您仍然有此全局速率限制限制:

应用全局速率限制,包括由 在 1 小时的滑动窗口内每个访问令牌的应用程序,无论 特定端点。速率限制也适用于无效或格式错误 要求。

沙盒 500 / 小时

直播5000/小时

【讨论】:

它适用于浏览器。我正在尝试从代码中获取。同样的代码在本地运行 200 个,有时在生产中提供 >400 个。 (相同的网址,每次在浏览器中都能正常工作) 您的生产服务器是否通过 ISP 负载平衡设备(具有多 WAN 的路由器)连接,而不是相同的公共 IP?在这种情况下,您的 ISP 之一或您的特定网络参数之一可能会阻止连接,而同时另一个允许。 (因为在我看来 40% 的失败是可疑的) 好主意。但是,没有http代理。所有调用中的相同客户端节点! 仔细检查速率限制,和/或如果您的生产服务器可能被视为“垃圾邮件”服务器... Ping instagram的cdn给你这个域名:fbcdn.net,所以看起来和Facebook CDN一样,你可能会认为Facebook CDN会认为突发33请求/秒获取图片数据,接近 DDOS 攻击...这可能是一个安全功能,它会在爆发期间禁止您的生产服务器 IP。【参考方案2】:

您可能希望发送带有适当用户代理、accept、accept-encoding、accept-language 以及 if-modified-since 和 cache-control 字段的真实 http 标头。

这样您将模拟您的浏览器执行的相同请求并处于完全相同的情况。

编辑: 鉴于用于测试的 2 台机器位于不同的国家(和网络),这可能只是由于网络可靠性的差异。

您还应该考虑到,由于内容托管在 CDN 后面,您的 2 个程序可能会访问不同的服务器。 (因此,再次强调可靠性的差异)。

最终,他们本可以在检测到机器人而非人类用户后真正暂时阻止您的流量。

如果您从“被阻止”的机器手动浏览 IG,会发生什么情况?你检查过不同的网址吗?

如果它适用于浏览器而不是您的程序,那是因为您的程序没有发送所有必需的标头。 (也许“Referer”标题也是?)。

【讨论】:

我没有传递 if-modified-since 和缓存控制,但我传递了用户代理和接受和内容类型。但这并不是一个盒子的错误,而不是具有相同代码的另一个盒子。 你的机器在不同的国家吗? 是的,一个是aws us region;另一个是从印度运行的本地盒子 其他 Instagram 网址有效!失败的 url 始终失败。大约有 40% 的失败。让我尝试放置 Referer 和 Origin - 我已经发送的其他标头(例如 User-Agent) 那么要么是他们在调节您的流量,要么是他们的 CDN 出现故障。顺便说一句,如果您告诉我们确切的错误,那会更有效,因为 > 400 可以有多种含义 -> en.wikipedia.org/wiki/…

以上是关于Instagram 是不是会阻止来自某些 IP 的 CDN URL 请求?的主要内容,如果未能解决你的问题,请参考以下文章

Instagram API 限制使用来自同一 IP 的多个访问令牌?

Instagram WebView 阻止 FB 登录

有没有办法阻止硒被重定向到登录?不使用 api 抓取 Instagram

Magneto - 来自特定状态的阻止订单

如何阻止来自未知域/IP 对我的 REST API 的调用?

如何配置 AWS ELB 以阻止某些 IP 地址? (已知的垃圾邮件发送者)[关闭]