Curl
curl 將 http 程式碼寫入 stderr 或文件
我正在編寫一些腳本來測試 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 中添加)