Http

使用 curl 請求使用錨標記重定向到相對 URL 的 URL

  • November 21, 2013

我正在使用 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(with Location: /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 對此進行了測試。

引用自:https://serverfault.com/questions/350477