Wget

為什麼 curl 和 wget 會導致 403 被禁止?

  • May 31, 2017

我嘗試使用wgetand下載文件,curl但由於 403 錯誤(禁止)而被拒絕。

我可以在同一台機器上使用網路瀏覽器查看文件。

我再次嘗試使用瀏覽器的使用者代理,由http://www.whatsmyuseragent.com獲得。我這樣做:

wget -U 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...

curl -A 'Mozilla/5.0 (X11; Linux x86_64; rv:30.0) Gecko/20100101 Firefox/30.0' http://...

但它仍然是被禁止的。403 可能還有什麼其他原因,我可以通過哪些方式更改wgetcurl命令來克服它們?

(這不是關於能夠獲取文件 - 我知道我可以從瀏覽器中保存它;這是關於理解為什麼命令行工具的工作方式不同)

更新

感謝對這個問題的所有優秀答案。我遇到的具體問題是伺服器正在檢查引用者。通過將此添加到命令行,我可以使用curland獲取文件wget

檢查引薦來源網址的伺服器通過 302 跳轉到另一個根本不執行任何檢查的位置,因此該站點的一個curlwget一個工作正常。

如果有人感興趣,這是因為我正在閱讀頁面以了解嵌入式 CSS,並試圖查看該站點的 css 範例。我遇到麻煩的實際網址是這個curl我最終得到的是

curl -L -H 'Referer: http://css-tricks.com/forums/topic/font-face-in-base64-is-cross-browser-compatible/' http://cloud.typography.com/610186/691184/css/fonts.css

wget是

wget --referer='http://css-tricks.com/forums/topic/font-face-in-base64-is-cross-browser-compatible/' http://cloud.typography.com/610186/691184/css/fonts.css

很有意思。

HTTP 請求可能包含更多沒有由 curl 或 wget 設置的標頭。例如:

  • Cookie:這是請求被拒絕的最可能原因,我在下載站點上看到過這種情況。給定一個 cookie key=val,您可以使用-b key=val(或--cookie key=val) 選項來設置它curl
  • 引薦來源網址(原文如此):當點擊網頁上的連結時,大多數瀏覽器傾向於將目前頁面作為引薦來源網址發送。不應該依賴它,但是當這個標題不存在時,即使是 eBay 也無法重置密碼。所以是的,它可能會發生。curl選項是-e URL--referer URL
  • 授權:由於使用者名/密碼對話框的 UI 無法控制,這現在變得不那麼流行了,但它仍然是可能的。可以curl使用-u user:password(或--user user:password)選項進行設置。
  • User-Agent:一些請求會根據使用者代理產生不同的響應。這可以用在好的方式(提供真正的下載而不是鏡像列表)或用不好的方式(拒絕不以Mozilla、 或Wget或開頭的使用者代理curl)。

您通常可以使用瀏覽器的開發者工具(Firefox 和 Chrome 支持此功能)來讀取瀏覽器發送的標頭。如果連接未加密(即不使用 HTTPS),那麼您也可以為此目的使用 Wireshark 等數據包嗅探器。

除了這些標頭之外,網站還可能在幕後觸發一些改變狀態的動作。例如,在打開頁面時,可能會在後台執行請求以準備下載連結。或者頁面上發生重定向。這些動作通常使用 Javascript,但也可能有一個隱藏框架來促進這些動作。

如果您正在尋找一種從下載站點輕鬆獲取文件的方法,請查看包含在plowshare中的 plowdown 。

引用自:https://unix.stackexchange.com/questions/139698