Amazon web services 使用工具时URL禁止403,但可以从浏览器中删除

Amazon web services 使用工具时URL禁止403,但可以从浏览器中删除,amazon-web-services,curl,amazon-ec2,http-headers,http-status-code-403,Amazon Web Services,Curl,Amazon Ec2,Http Headers,Http Status Code 403,我有一些图像,我需要做一个HttpRequestMethod.HEAD,以找出图像的一些细节 当我转到浏览器上的图像url时,它会毫无问题地加载 当我试图通过我的代码或在线工具获取标题信息时,它失败了 示例URL是 如前所述,我曾使用在线工具尝试实现Head请求,但我收到的403禁止消息与我在代码中收到的消息相同。 我曾尝试向Head请求添加许多不同的头(用户代理、接受、接受编码、接受语言、缓存控制、连接、主机、Pragma、升级不安全请求),但这些都不起作用 它也无法通过hull.It执行正常

我有一些图像,我需要做一个HttpRequestMethod.HEAD,以找出图像的一些细节

当我转到浏览器上的图像url时,它会毫无问题地加载

当我试图通过我的代码或在线工具获取标题信息时,它失败了

示例URL是

如前所述,我曾使用在线工具尝试实现Head请求,但我收到的403禁止消息与我在代码中收到的消息相同。 我曾尝试向Head请求添加许多不同的头(用户代理、接受、接受编码、接受语言、缓存控制、连接、主机、Pragma、升级不安全请求),但这些都不起作用

它也无法通过hull.It执行正常的GET请求。同样的403错误

如果相关的话,我的代码是一个c#web服务,运行在AWS云上(以防万一adorama服务器有一些我不知道的针对AWS的东西)。为了测试这一点,我还启动了一个ec2(linux box)并运行了curl,它还返回了403错误。在我的个人计算机上本地运行curl将返回二值图像,这可能只是图像数据

为了消除明显的想法,我的代码在许多其他网站上都能成功运行,只是这一个网站存在问题


你知道我需要什么才能下载图片标题而不获得403吗?

我从Amazon上尝试了这个URL,但它对我不起作用。然而,wget确实可以在其他不在amazonec2上的服务器上工作。这是EC2上的wget输出

wget -S http://www.adorama.com/images/large/CHHB74P.JPG
--2016-03-23 08:42:33--  http://www.adorama.com/images/large/CHHB74P.JPG
Resolving www.adorama.com... 23.40.219.79
Connecting to www.adorama.com|23.40.219.79|:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.0 403 Forbidden
  Server: AkamaiGHost
  Mime-Version: 1.0
  Content-Type: text/html
  Content-Length: 299
  Cache-Control: max-age=604800
  Date: Wed, 23 Mar 2016 08:42:33 GMT
  Connection: close
2016-03-23 08:42:33 ERROR 403: Forbidden.
但在另一台Linux主机上,它确实起了作用。这是输出

wget -S http://www.adorama.com/images/large/CHHB74P.JPG
--2016-03-23 08:43:11--  http://www.adorama.com/images/large/CHHB74P.JPG
Resolving www.adorama.com... 23.45.139.71
Connecting to www.adorama.com|23.45.139.71|:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.0 200 OK
  Content-Type: image/jpeg
  Last-Modified: Wed, 23 Mar 2016 08:41:57 GMT
  Server: Microsoft-IIS/8.5
  X-AspNet-Version: 2.0.50727
  X-Powered-By: ASP.NET
  ServerID: C01
  Content-Length: 15131
  Cache-Control: private, max-age=604800
  Date: Wed, 23 Mar 2016 08:43:11 GMT
  Connection: keep-alive
  Set-Cookie: 1YDT=CT; expires=Wed, 20-Apr-2016 08:43:11 GMT; path=/; domain=.adorama.com
  P3P: CP="NON DSP ADM DEV PSD OUR IND STP PHY PRE NAV UNI"
Length: 15131 (15K) [image/jpeg]
Saving to: \u201cCHHB74P.JPG\u201d

100%[=====================================>] 15,131      --.-K/s   in 0s      

2016-03-23 08:43:11 (460 MB/s) - \u201cCHHB74P.JPG\u201d saved [15131/15131]
我猜映像提供程序故意阻止来自EC2地址范围的请求

在这两个示例中,wget传出ip地址不同的原因是由于adorama提供的cdn提供商上的DNS解析出现了相同的问题

在当地,它工作顺利。在一个AWS实例中,我遇到了同样的问题

我认为这是DNS解析问题(重定向到故障节点)。因此,我尝试指定与客户端解决的IP地址相同的IP地址,但没有解决问题

我猜测Akamai(在本例中,该服务由Akamai CDN提供)正在阻止AWS。不知何故,这是可以理解的,客户为CDN支付流量,通过滥用它,人们可以产生巨大的账单

连接到www.adorama.com(www.adorama.com)| 104.86.164.205 |:80。。。连接

HTTP request sent, awaiting response... 
HTTP/1.1 403 Forbidden
Server: **AkamaiGHost**
Mime-Version: 1.0
Content-Type: text/html
Content-Length: 301
Cache-Control: max-age=604800
Date: Wed, 23 Mar 2016 09:34:20 GMT
Connection: close
2016-03-23 09:34:20 ERROR 403: Forbidden.

Web服务器可以实现检查特定指纹属性的方法,以防止自动机器人。这里有一些他们可以检查

  • Geoip,IP
  • 浏览器标题
  • 用户代理
  • 插件信息
  • 浏览器字体返回
您可以在此处模拟浏览器标题并学习一些指纹“属性”:


您可以尝试复制浏览器的行为,并插入类似的头/用户代理。普通curl/wget不太可能满足这些条件,甚至像phantomjs这样的工具偶尔也会被阻塞。有些人喜欢像selenium webdriver这样的工具来启动实际的浏览器,这是有原因的。

我发现使用另一个同样受AkamaiGHost保护的url时由于用户代理中的某些部分而被阻塞。特别是使用带有协议的链接被阻止:

使用
curl-H'User-Agent:some-User-Agent'https://some.website
我发现不同用户代理的结果如下:

  • Mozilla/5.0(X11;Ubuntu;Linux x86_64;rv:70.0)Gecko/20100101 Firefox/70.0
    OK
  • facebookexternalhit/1.1(+http\://www.facebook.com/externalhit\u uatext.php)
    :403
  • https://bar
    :好的
  • https://bar
    :403
现在我所能找到的就是这个(被否决的)答案,它指出头值中不允许使用冒号(
)。这显然不是这里发生的唯一事情,因为Mozilla示例也有冒号,只是没有链接


我想至少大多数网络服务器都不在乎,允许facebook的机器人和其他机器人在他们的用户代理中有一个联系人url。但显然AkamaiGHost确实阻止了它。

是的,感谢您在您的AWS上确认,这也是我的怀疑,他们的CDN阻止了AWS请求。AWS也发布了他们的IP范围,因此Akamai可以非常轻松地阻止这些请求。不过,我没有发现任何证据表明他们正在这么做。。。我希望这只是一些先进的指纹,我们可以欺骗的要求。