Debian
在 Debian 上控制 curl 輸出
我想執行一個 curl 命令,並且只有在出現錯誤時才將內容寫入標準輸出。
當我從終端執行命令時,預設情況下會獲得此功能。當我從 perl 腳本中執行命令時(``),它會輸出進度資訊,但不會輸出任何錯誤消息。
我可以通過附加
-s
(--silent
) 標誌來隱藏進度資訊,但我不能強制錯誤以直接從 bash 執行時的方式顯示。(-S
)--show-errors
標誌似乎沒有效果。我也嘗試過將輸出轉移到/etc/null,但這似乎完全阻止了任何輸出。
my $curl_result = `curl -s -S -X PUT "$url" -H "$h1" -H "$h2" -H "$h3" -d "$data"`;
下面是我要查找的錯誤類型的範例。這是由故意格式錯誤的 IP 引起的:
{ "code":"INVALID_RECORDS", "message":"One or more of the given records is invalid", "fields": [{ "code":"INVALID_RECORDS", "message":"Invalid [ipaddress] provided for record data, [test].", "path":"records" }], "name":"ApiError", "errors":["Invalid [ipaddress] provided for record data, [test]."] }
您需要區分 curl 看到的錯誤和 http 伺服器返回的錯誤。後者不是 curl 的錯誤。但是,您可以通過將選項添加到 curl 來輕鬆檢查 http 狀態程式碼
-w '\n%{http_code}\n'
這會將 HTTP 標頭附加到標準輸出,即 200 表示 OK。所以你的 perl 可以做類似的事情
my $curl_result = `curl -s -S -w '\n%{http_code}\n' ... 2>/dev/null`; my @lines = split(/\n/,$curl_result); my $httpcode = $lines[-1]; if($httpcode eq 200){ print "ok\n"; } else{ print "error\n"; }