Wget
為什麼 curl 和 wget 會導致 403 被禁止?
我嘗試使用
wget
and下載文件,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 可能還有什麼其他原因,我可以通過哪些方式更改
wget
和curl
命令來克服它們?(這不是關於能夠獲取文件 - 我知道我可以從瀏覽器中保存它;這是關於理解為什麼命令行工具的工作方式不同)
更新
感謝對這個問題的所有優秀答案。我遇到的具體問題是伺服器正在檢查引用者。通過將此添加到命令行,我可以使用
curl
and獲取文件wget
。檢查引薦來源網址的伺服器通過 302 跳轉到另一個根本不執行任何檢查的位置,因此該站點的一個
curl
或wget
一個工作正常。如果有人感興趣,這是因為我正在閱讀此頁面以了解嵌入式 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 。