14,974
edits
No edit summary |
|||
| Line 202: | Line 202: | ||
dquote> | dquote> | ||
</pre> | </pre> | ||
== 如何隱藏進度條 == | |||
執行 curl 命令時,通常會輸出詳細的下載和上傳進度資訊,如下所示: | |||
<pre> | |||
% Total % Received % Xferd Average Speed Time Time Time Current | |||
Dload Upload Total Spent Left Speed | |||
100 90141 100 90141 0 0 20029 0 0:00:04 0:00:04 --:--:-- 22012 | |||
</pre> | |||
要隱藏 curl 命令的進度條,你可以使用 `-s`(silent)選項來隱藏所有輸出,或使用 `-S`(silent with error messages)選項來隱藏進度條但仍顯示錯誤訊息。 | |||
<pre> | |||
curl -sS [URL] | |||
</pre> | |||
或者,如果你想隱藏所有輸出包括錯誤訊息,只需使用 `-s`(silent)選項: | |||
``` | |||
curl -s [URL] | |||
``` | |||
== Windows 與 Mac/Linux 系統的 cURL JSON 傳遞問題 == | |||
'''1. 問題''' | |||
在 Windows 系統執行 cURL 命令時遇到以下錯誤: | |||
<pre> | |||
Invalid JSON payload received. Unknown name "": Root element must be a message. | |||
</pre> | |||
'''2. 解決方案''' | |||
Windows 系統: | |||
<pre> | |||
curl -X POST -H "Content-Type: application/json" "API_URL" -d "{\"key\":\"value\"}" | |||
</pre> | |||
Mac/Linux 系統: | |||
<pre> | |||
curl -X POST -H "Content-Type: application/json" "API_URL" -d '{"key":"value"}' | |||
</pre> | |||
PHP 程式碼: | |||
<pre> | |||
$is_windows = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN'; | |||
if ($is_windows) { | |||
$command = sprintf('-d "{\"key\":\"%s\"}"', $value); | |||
} else { | |||
$command = sprintf("-d '%s'", $json_payload); | |||
} | |||
</pre> | |||
'''3. 問題說明''' | |||
* 根本原因:Windows 和 Mac/Linux 處理 shell 命令中的引號方式不同 | |||
* Windows:需要使用雙引號並轉義內部的引號 | |||
* Mac/Linux:可以使用單引號包住完整的 JSON 字串 | |||
* 當使用不當的引號格式時,JSON payload 會被錯誤解析,導致 API 回傳格式錯誤的訊息 | |||
== 延伸閱讀 == | == 延伸閱讀 == | ||