簡體   English   中英

使用工具時 URL 被禁止 403 但瀏覽器沒問題

[英]URL forbidden 403 when using a tool but fine from browser

我有一些圖像需要執行 HttpRequestMethod.HEAD 以找出圖像的一些細節。

當我在瀏覽器上訪問圖像 url 時,它可以毫無問題地加載。

當我嘗試通過我的代碼或通過在線工具獲取標題信息時失敗

一個示例 URL 是http://www.adorama.com/images/large/CHHB74P.JPG

如前所述,我使用了在線工具Hurl.It來嘗試獲得 Head 請求,但我收到的 403 Forbidden 消息與我在代碼中收到的消息相同。 我嘗試向 Head 請求(用戶代理、接受、接受編碼、接受語言、緩存控制、連接、主機、編譯指示、升級不安全請求)添加許多不同的標頭,但這些似乎都不起作用。

它也無法通過 Hurl.it 執行正常的 GET 請求。 同樣的 403 錯誤。

如果相關,我的代碼是 ac# web service 並且在 AWS 雲上運行(以防萬一 adorama 服務器有一些我不知道的針對 AWS 的東西)。 為了測試這一點,我還啟動了一個 ec2(linux box)並運行 curl,它也返回了 403 錯誤。 在我的個人計算機上本地運行 curl 會返回二進制圖像,這可能只是圖像數據。

並且只是為了消除明顯的想法,我的代碼在許多其他網站上都可以成功運行,這只是一個存在問題的網站

知道我需要什么才能下載圖像標題而不是 403 嗎?

同樣的問題在這里。

在本地它運行順利。 從 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.

我嘗試了來自 Amazon 的 URL,但它對我不起作用。 但是,wget 確實可以從不在 Amazon EC2 上的其他服務器上工作。 這是 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 解析

Web Server 可能會實施檢查特定指紋屬性的方法,以防止自動機器人。 這里有一些他們可以檢查

  • 地理IP,IP
  • 瀏覽器標題
  • 用戶代理
  • 插件信息
  • 瀏覽器字體返回

您可以在此處模擬瀏覽器標題並學習一些指紋“屬性”: https : //panopticlick.eff.org

您可以嘗試復制瀏覽器的行為方式並注入類似的標頭/用戶代理。 普通的 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_uatext.php) :403
  • https ://bar : 好的
  • https://bar :403

我現在能找到的就是這個(被否決的)答案https://stackoverflow.com/a/48137940/230422指出標頭值中不允許使用冒號 ( : )。 這顯然不是這里發生的唯一事情,因為 Mozilla 示例也有一個冒號,只是沒有鏈接。

我想至少大多數網絡服務器不關心並允許 facebook 的機器人和其他機器人在他們的用戶代理中有一個聯系 url。 但似乎 AkamaiGHost 確實阻止了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM