Curl

curl 將 http 程式碼寫入 stderr 或文件

  • April 26, 2020

我正在編寫一些腳本來測試 API。我對 JSON 響應以及請求的 HTTP 狀態程式碼感興趣。我肯定想漂亮地列印 JSON 響應以使其更易於閱讀。

curl用來執行請求並想用來python -m json.tool漂亮地列印 json 結果。

Curl 有一個不錯的選項-w,可用於顯示有關請求的資訊,例如%{http_code}. 不幸的是,該資訊列印到 stdout 並混淆了python -m json.tool. 似乎無法將其配置為忽略尾隨的非 json 數據。

當我做

curl \
'--silent' \
'--insecure' \
'-L' \
'-w' \
'\n%{http_code}\n' \
'--user' \
<REDACTED> \
'-X' \
'GET' \
'--' \
'https://somecompany.com/some_api_endpoint' \
| python -m json.tool

我明白了

$ bash call_api_endpoint_script.sh 
Extra data: line 2 column 1 - line 3 column 1 (char 203 - 207)
Exit 1

有沒有辦法配置curl將狀態程式碼寫入文件?手冊頁中的-w選項似乎沒有提到將這些資訊重定向到其他地方的可能性。

-o我通過使用將內容重定向到臨時文件找到了解決此問題的方法,只在 curl 的輸出中留下狀態程式碼。

然後我可以從中讀取臨時文件的內容python -m json.tool並漂亮地列印它們。

例如,

content=$(mktemp)

curl \
...
-w \
'HTTP_STATUS_CODE: %{http_code}\n' \
...
-o \
"$content" \
-- \
'https://somecompany.com/some_api_endpoint'

<"$content" python -m json.tool
$ curl -s -k -w '%{stderr}%{http_code}\n%{stdout}\n' \
 http://www.mocky.io/v2/5e13eae9310000598ad4792b |\
 tee /dev/stderr | jq -r '.name'
200
{
   "name": "Grape"
}
Grape

stderr 從此時起,-w, –write-out 輸出將被寫入標準錯誤。(在 7.63.0 中添加)

stdout 從此時起,-w, –write-out 輸出將被寫入標準輸出。這是預設的,但是可以用來切換到stderr後切換回來。(在 7.63.0 中添加)

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