cURL
這篇主要是整理過去經常使用到的範例,同時也是作為教育訓練使用的文件。以下的範例都是在 Linux or Mac OS 執行的。
大綱
- Basic usage: 基本的用法與常用的參數 (Options)
- HTML form
- Cookie
- HTTP authencation
- RESTful
- Debugging and Scripting
Basic usage
基本的格式和一般 CLI (Commnad-line interface) 都一樣。
1 | Usage: curl [options...] <url> |
Basic options
參考 man curl
以及 curl --help
內容,摘錄幾個基本參數。
-o, --output FILE
: Write output to file instead of stdout-S, --show-error
: Show error. With -s, make curl show errors when they occur-s, --silent
: Silent mode. Don’t output anything-A, --user-agent STRING
: User-Agent to send to server (H)-v, --verbose
: Make the operation more talkative-V, --version
: Show version number and quit-w, --write-out FORMAT
: What to output after completion-O/--remote-name
: Write output to a file named as the remote file
Examples (常見例子)
- GET a http content:
curl www.google.com
- Download a file:
curl -O <url>
- Download a file, and specify file name:
curl -o <filename> <url>
類似的工具: wget <url>
HTML form
常用的 options:
-d/--data <data>
: HTTP POST data (H)--data-ascii <data>
: HTTP POST ASCII data (H)--data-binary <data>
: HTTP POST binary data (H)
簡單的例子:
1 | PARAMS="username=rickh&password=passw0rd" |
POST JSON Data
下面另一個 POST JSON data 的例子, 注意 -d
引號的格式, 資料內容如果有雙引號, 那麼用單引號描述資料內容, 如果使用雙引號描述 -d
, 那麼資料內容的引號需要被 escape, 如下:
1 | URL=http://127.0.0.1/login |
如果 JSON 本身是存在另一個檔案, 那麼可以用小老鼠指定檔名, 這在測試 RESTful 時很好用, 如下:
1 | curl -d @data.json ${URL} |
Cookie
有時候需要模擬瀏覽器的行為, 特別是有 cookie 的網站. 可以利用參數 -c
將存起來檔案, 然後在下一個動作利用 -b
指定 cookie 檔案.
-c, --cookie-jar FILE
: Write cookies to this file after operation (H)-b, --cookie STRING/FILE
: String or file to read cookies from (H)
延續前一個段落的例子:
1 | URL=http://127.0.0.1/login |
以下是一個 cookie 的內容範例:
1 | 10.1.100.82 FALSE / FALSE 0 admin:language zh-cn |
HTTP authencation
幾個常用到的 options:
-u/--user <user[:password]>
: Set server user and password-k/--insecure
: Allow connections to SSL sites without certs (H)
1 | ACCOUNT=rickh |
如果是 HTTPS, 那麼可以帶上 -k
, 變成: curl -k --user "$ACCOUNT:$PASSWORD" ${URL}
RESTful client
RESTful 利用 HTTP protocol 特性為基礎,所以只要能夠指定相關參數即可,像是 HTTP Header, HTTP Method, Data, 還有如何存下接收的 Data, 相關參數:
-H/--header <line>
: Custom header to pass to server (H)-X, --request COMMAND
: Specify request command to use, GET/POST/PUT/DELETE
以下是一個指定 Content-Type 和 Accept 為 application/json
的例子,要留意多個 HTTP Header 使用多個 -H
描述:
1 | api_url=http://10.1.101.204:8080/api/app/login |
Debugging and Scripting
使用 curl 有時候需要更多細節用來 debug, 但是用在程式裡當作功能使用時, 可能會希望不要有太多額外的訊息, 或者隱藏這些資料. 所以前述的例子, 可以搭配以下的參數作為 debug or script 使用:
-D, --dump-header FILE
: Write the headers to this file-f, --fail
: Fail silently (no output at all) on HTTP errors (H)-i, --include
: Include protocol headers in the output (H/F)-o, --output FILE
: Write output to file instead of stdou-s, --silent
: Silent mode. Don’t output anything-v, --verbose
: Make the operation more talkative-w, --write-out FORMAT
: What to output after completion
延伸閱讀
站內資料
參考資料
- REST-esting with cURL
- How to POST JSON data with Curl from Terminal/Commandline to Test Spring REST?
- wxJavascript - cURL