Amazon web services 使用工具时URL禁止403,但可以从浏览器中删除
我有一些图像,我需要做一个HttpRequestMethod.HEAD,以找出图像的一些细节 当我转到浏览器上的图像url时,它会毫无问题地加载 当我试图通过我的代码或在线工具获取标题信息时,它失败了 示例URL是 如前所述,我曾使用在线工具尝试实现Head请求,但我收到的403禁止消息与我在代码中收到的消息相同。 我曾尝试向Head请求添加许多不同的头(用户代理、接受、接受编码、接受语言、缓存控制、连接、主机、Pragma、升级不安全请求),但这些都不起作用 它也无法通过hull.It执行正常的GET请求。同样的403错误 如果相关的话,我的代码是一个c#web服务,运行在AWS云上(以防万一adorama服务器有一些我不知道的针对AWS的东西)。为了测试这一点,我还启动了一个ec2(linux box)并运行了curl,它还返回了403错误。在我的个人计算机上本地运行curl将返回二值图像,这可能只是图像数据 为了消除明显的想法,我的代码在许多其他网站上都能成功运行,只是这一个网站存在问题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执行正常
你知道我需要什么才能下载图片标题而不获得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
我发现不同用户代理的结果如下:
OKMozilla/5.0(X11;Ubuntu;Linux x86_64;rv:70.0)Gecko/20100101 Firefox/70.0
:403facebookexternalhit/1.1(+http\://www.facebook.com/externalhit\u uatext.php)
:好的https://bar
:403https://bar
:
)。这显然不是这里发生的唯一事情,因为Mozilla示例也有冒号,只是没有链接
我想至少大多数网络服务器都不在乎,允许facebook的机器人和其他机器人在他们的用户代理中有一个联系人url。但显然AkamaiGHost确实阻止了它。是的,感谢您在您的AWS上确认,这也是我的怀疑,他们的CDN阻止了AWS请求。AWS也发布了他们的IP范围,因此Akamai可以非常轻松地阻止这些请求。不过,我没有发现任何证据表明他们正在这么做。。。我希望这只是一些先进的指纹,我们可以欺骗的要求。