curl
是一個運行在命令行的 http 客戶端。使用curl
命令能夠發起 http 請求並返回結果。
相信不少開發者都喜歡使用圖形化界面工具(例如 Postman)來進行 API 的調試。可是我以爲了解 curl
命令行工具,會給開發帶來很大的幫助,可讓開發者更直觀地瞭解 http 請求,也方便了開發過程當中的溝通與交流。html
注意:Windows 系統是沒有
curl
命令的,要想 Windows 中使用它,可使用
Git Bash 或者
Cygwin。
curl [options] [URL...]
先來嘗試一下不加任何參數請求百度首頁和 一言 API。git
curl https://www.baidu.com
curl https://v1.hitokoto.cn/
能夠看到返回的信息都是一串文本(字符串)。當所請求的內容是html(百度首頁)時返回html文本;當請求的內容是JSON API(一言 API)時返回JSON文本。在瀏覽器中,瀏覽器即是根據這文本內容來進行頁面渲染。web
不加任何參數使用 curl
命令只是返回http的響應正文
內容(後面有提到),若是要想查看完整的http請求信息能夠加上 -v
參數。json
curl -v https://v1.hitokoto.cn/
此時http請求的完整信息被打印出來,這些信息即是http的 請求報文
和 響應報文
。api
HTTP請求能夠當作向服務器發送字符串,服務器收到後返回字符串的過程。向服務器發送的字符串稱爲 請求報文
,而服務器返回的字符串稱爲 響應報文
。瀏覽器
一個HTTP請求報文由 請求行
、請求頭
、空行
和 請求數據
4個部分組成。bash
響應報文由 狀態行
、響應頭
和 響應正文
3個部分組成。服務器
curl
命令不加 -v
參數時返回的內容。在上面的例子中它們的具體位置以下app
> GET / HTTP/1.1 (請求行) > Host: v1.hitokoto.cn (請求頭) > User-Agent: curl/7.64.0 (請求頭) > Accept: */* (請求頭) > (空行) < HTTP/1.1 200 OK (狀態行) < Date: Thu, 25 Jul 2019 01:51:45 GMT (下面都是響應頭) < Content-Type: application/json; charset=utf-8 < Content-Length: 182 < Connection: keep-alive < X-Request-Id: 0b8927ab-47be-4e61-8c0e-04acfbe81bb4 < X-DNS-Prefetch-Control: off < X-Frame-Options: SAMEORIGIN < Strict-Transport-Security: max-age=15552000; includeSubDomains < X-Download-Options: noopen < X-Content-Type-Options: nosniff < X-XSS-Protection: 1; mode=block < X-Via: 1.1 PSgxnndx7ba44:7 (Cdn Cache Server V2.0) < (下面是響應正文) { "id": 708, "hitokoto": "彼方爲誰,無我有問 ;九月露溼,待君以前", "type": "a", "from": "你的名字", "creator": "moe", "created_at": "1477825585" }* Connection #0 to host v1.hitokoto.cn left intact
curl
命令的經常使用參數有:curl
例子:
curl 'https://v1.hitokoto.cn/' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' -H 'Cookie: _ga=GA1.2.303411826.1562744042' -D 'c=b'
上面的例子表示
POST
請求 https://v1.hitokoto.cn/
,因爲添加了 -D
參數,因此 -X POST
參數能夠不寫請求頭
,分別是 User-Agent
,和 Cookie
請求數據
,c=b
。若 請求數據
有多個時,用 &
鏈接。另外,在現代瀏覽器的開發者工具中,有一個很方便的功能,能夠複製所請求的 curl
命令。
複製出來的結果:
curl 'https://v1.hitokoto.cn/' -H 'Connection: keep-alive' -H 'Cache-Control: max-age=0' -H 'Upgrade-Insecure-Requests: 1' -H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: zh-CN,zh;q=0.9' -H 'Cookie: _ga=GA1.2.303411826.1562744042' --compressed
當調試 api 接口出現問題時,咱們就能夠直接發送這段命令給其餘開發者,只需粘貼到終端運行,便能知道問題所在,能夠說是至關的方便。
參考資料