我正在使用 curl
在Linux上的命令行發出HTTP請求。響應主體打印到標準輸出,這很好,但我無法從手冊頁中看到如何獲取curl來從響應中打印HTTP狀態代碼(404,403等)。這可能嗎?
我正在使用 curl
在Linux上的命令行發出HTTP請求。響應主體打印到標準輸出,這很好,但我無法從手冊頁中看到如何獲取curl來從響應中打印HTTP狀態代碼(404,403等)。這可能嗎?
這應該適合你 如果 Web服務器能夠響應HEAD請求(這不會執行 GET
):
curl -I http://www.example.org
另外,讓cURL遵循重定向(3xx狀態)添加-L。
打印出更具體的方法 只是 HTTP狀態代碼的含義如下:
curl -s -o /dev/null -w "%{http_code}" http://www.example.org/
在腳本中更容易使用,因為它不需要任何解析:-)
可能會添加參數-I以提高響應負載性能。此參數僅請求響應的狀態/標頭,沒有下載響應正文。 (%{http_code}在HTTP有效負載的第一行返回)
即:
curl -s -o /dev/null -I -w "%{http_code}" http://www.example.org/
如果要查看標題以及結果,可以使用verbose選項:
curl -v http://www.example.org
curl --verbose http://www.example.org
狀態將顯示在標題中。例如。
< Date: Tue, 04 Nov 2014 19:12:59 GMT
< Content-Type: application/json; charset=utf-8
< Status: 422 Unprocessable Entity
除了執行以下所有標題之外,您還可以打印狀態代碼:
curl -i http://example.org
關於好事 -i
是它的工作原理 -X POST
同樣。
如果要捕獲變量中的HTTP狀態代碼,但仍將內容重定向到STDOUT,則必須創建兩個STDOUT。你可以這樣做 過程替換>() 和 命令替換$()。
首先,創建一個文件描述符 3
對於您當前的流程'STDOUT with exec 3>&1
。
然後,使用curl's -o
使用命令替換將響應內容重定向到臨時fifo的選項,然後在該命令替換中,將輸出重定向回當前進程STDOUT文件描述符 3
同 -o >(cat >&3)
。
全部放在一起 bash
3.2.57(1)-release
(標準為 macOS
):
#creates a new file descriptor 3 that redirects to 1 (STDOUT)
exec 3>&1
# Run curl in a separate command, capturing output of -w "%{http_code}" into HTTP_STATUS
# and sending the content to this command's STDOUT with -o >(cat >&3)
HTTP_STATUS=$(curl -w "%{http_code}" -o >(cat >&3) 'http://example.com')
請注意,這不起作用 /bin/sh
如 SamK在下面的評論中指出。
重新定義捲曲輸出:
curl -sw '%{http_code}' http://example.org
可以與任何請求類型一起使用。
這將向url發送請求,僅獲取響應的第一行,將其拆分為塊並選擇第二行。
它包含響應代碼
curl -I http://example.org 2>/dev/null | head -n 1 | cut -d$' ' -f2