Http
使用 curl 請求使用錨標記重定向到相對 URL 的 URL
我正在使用 curl 請求一個 URL,該 URL 使用
Location:
如下行重定向到不同的 URL:Location:/path/to/resource#name
據我了解,根據 HTTP 規範,重定向響應中的那一行是無效的,因此整個 curl 呼叫可以理解地失敗(在這種情況下,響應程式碼為 400)。但是,使用 wget 或 Web 瀏覽器請求 URL 會成功呈現頁面(我假設通過填充絕對路徑或在重定向之前刪除錨標記的啟發式方法)。
我能做些什麼來讓 curl 做同樣的事情(做必要的事情來成功遵循重定向,即使它是“正式”格式錯誤的)?
**編輯:**更多細節。最終的響應程式碼是 400(不是 404 或其他)。當我執行 HEAD 請求(with
curl -I -L
)時,我得到一個302 Found
(withLocation: /Error
)重定向到500 Server Error
. 但是,如果我執行正常請求(沒有-I
選項但有-L
選項),我會得到一個http_code
(在 curl 中--write-out
)的400
. 因此,在這種情況下,HEAD 請求的功能似乎與標準 GET 不同。
我發現 curl 7.15.5 會出現這個特殊問題,但 curl 7.21.0 可以正常工作。所以必須有一個錯誤修復或在兩者之間實現的功能來解決它。如果有人確切知道是什麼更新檔或更改解決了這個問題,那將不勝感激!
據我了解,curl 預設情況下不遵循 Location 標頭。
您可以使用
-L
或--location
開關啟用此類行為。像這樣:tom@slappy:~▶ curl -I -L http://shell/redirect.php HTTP/1.1 302 Found Date: Tue, 17 Jan 2012 00:13:54 GMT Server: Apache/2.2.17 (Ubuntu) X-Powered-By: PHP/5.3.5-1ubuntu7.2 Location: /target.html#someAnchor Content-Type: text/html HTTP/1.1 200 OK Date: Tue, 17 Jan 2012 00:13:54 GMT Server: Apache/2.2.17 (Ubuntu) Last-Modified: Tue, 17 Jan 2012 00:10:37 GMT Accept-Ranges: bytes Content-Length: 7 Content-Type: text/html
注意:
-I
僅用於顯示標題而不是頁面內容。我使用在 Ubuntu 上執行的 curl 7.21.6 對此進行了測試。