【问题标题】: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。

标签: facebook instagram cdn instagram-api


【解决方案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/…
猜你喜欢
  • 2022-01-15
  • 2010-09-21
  • 2015-04-27
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 2022-06-28
  • 2022-01-20
  • 2012-05-02
相关资源
最近更新 更多