bash——curl

語言: CN / TW / HK

1. 顯示事務

// 顯示響應頭和響應體
curl -i www.baidu.com
// 只顯示響應頭
curl -I www.baidu.com
// 顯示請求頭 和 響應報文(頭和體)
curl -v www.baidu.com
// 記錄更詳細的事務(可以看到請求體)
curl --trace output www.baidu.com
curl --trace-ascii output www.baidu.com

2. 傳送表單資訊

// 用GET方法
curl www.baidu.com/search?q=aaa
// -G引數用來構造url,若沒有-G,則會發送POST請求
// 下面請求的url為 https://google.com/search?q=kitties&count=20
curl -G -d 'q=kitties' -d 'count=20' https://google.com/search
// 構造url編碼的url
 curl -G --data-urlencode 'comment=hello world' https://www.example.com

// 用POST方法
curl -X POST --data "q=aa" www.baidu.com/search
// -d 指定請求體
curl -d'login=emma&password=123'-X POST https://google.com/login
curl -d 'login=emma' -d 'password=123' -X POST  https://google.com/login
// 使用-d引數以後,HTTP 請求會自動加上標頭Content-Type : application/x-www-form-urlencoded。並且會自動將請求轉為 POST 方法,因此可以省略-X POST
// 讀取本地文字檔案的資料,向伺服器傳送。
curl -d '@data.txt' https://google.com/login

// --data-urlencode引數等同於-d,傳送 POST 請求的資料體,區別在於會自動將傳送的資料進行 URL 編碼
// 下面的空格會進行編碼
curl -X POST --data-urlencode "q=aa bb" www.baidu.com/search

3. 指定http方法

curl預設為 GET,使用-X可以指定其它方法

curl -X POST www.baidu.com
curl -X DELETE www.baidu.com

4. 檔案上傳

若檔案上傳的表單如此

  <form method="POST" enctype='multipart/form-data' action="upload.cgi">
    <input type=file name=upload>
    <input type=submit name=press value="OK">
  </form>

則如此上傳

curl --form upload=@localfilename --form press=OK [URL]
// -F引數用來向伺服器上傳二進位制檔案。
// 下面命令會給 HTTP 請求加上標頭Content-Type: multipart/form-data,然後將檔案photo.png作為file欄位上傳。
curl -F '[email protected]' https://google.com/profile
// -F引數可以指定 MIME 型別。
// 下面命令指定 MIME 型別為image/png,否則 curl 會把 MIME 型別設為application/octet-stream。
curl -F '[email protected];type=image/png' https://google.com/profile
// -F引數也可以指定檔名。
// 原始檔名為photo.png, server收到的檔名為me.png
curl -F '[email protected];filename=me.png' https://google.com/profile

5. 頭部欄位

// -H引數新增 HTTP 請求的標頭。
curl -H 'Accept-Language: en-US' https://google.com
curl -H 'Accept-Language: en-US' -H 'Secret-Message: xyzzy' https://google.com
// 下面命令 新增 Content-Type: application/json,然後用-d引數傳送 JSON 資料。
curl -d '{"login": "emma", "pass": "123"}' -H 'Content-Type: application/json' https://google.com/login

// referer欄位用於表示你是從哪裡跳轉過來的
curl --referer www.baidu.com
// -e引數用來設定 HTTP 的標頭Referer,表示請求的來源。
curl -e 'https://google.com?q=example' https://www.example.com
curl -H 'Referer: https://google.com?q=example' https://www.example.com

// user-agent
curl --user-agent "[User Agent]" [URL]
curl -A 'Mozilla/5.0' https://google.com
// 下面的命令會移除UA
curl -A '' https://google.com
// -A 指定UA,-H指定頭部,使用-H顯示指定UA
curl -H 'User-Agent: php/1.0' https://google.com

// 傳送cookie
// 具體的cookie的值,可以從http response頭資訊的`Set-Cookie`欄位中得到。
curl --cookie "name=xxx" www.example.com
// `-c cookie-file`可以儲存伺服器返回的cookie到檔案
// 請求www.google.com,並儲存伺服器生成的cookie到cookie.txt
 curl -c cookies.txt https://www.google.com
curl -b cookies http://example.com
// `-b cookie-file`可以使用這個檔案作為cookie資訊,進行後續的請求。
// 下面的命令會生成一個 Cookie: foo=bar的頭部
curl -b 'foo=bar' https://google.com
curl -b 'foo1=bar;foo2=bar2' https://google.com
// 讀取本地cookies.txt檔案,裡面是伺服器設定的cookie
curl -b cookies.txt https://www.google.com
// 增加頭資訊
curl --header "Content-Type:application/json" http://example.com
// 認證資訊
curl --user name:password example.com

6. 雜項

// -k引數指定跳過 SSL 檢測。下面命令不會檢查伺服器的 SSL 證書是否正確。
curl -k https://www.example.com

// -L引數會讓 HTTP 請求跟隨伺服器的重定向。curl 預設不跟隨重定向。
curl -L -d 'tweet=hi' https://api.twitter.com/tweet

// --limit-rate用來限制 HTTP 請求和迴應的頻寬,模擬慢網速的環境。
curl --limit-rate 200k https://google.com

// -o引數將伺服器的迴應儲存成檔案,等同於wget命令。
curl -o example.html https://www.example.com

// -O引數將伺服器迴應儲存成檔案,並將 URL 的最後部分當作檔名。
 curl -O https://www.example.com/foo/bar.html

// -s引數將不輸出錯誤和進度資訊。
// 但是不發生錯誤的話,會正常顯示執行結果。
curl -s https://www.example.com
// 如果想讓 curl 不產生任何輸出,可以使用下面的命令。
curl -s -o /dev/null https://google.com