歡迎光臨
每天分享高質量文章

使用curl來除錯你的應用

我們在客戶端開發過程中總免不了和後端進行api對接,有時候需要對傳回的資料格式進行除錯,有時候每次運行客戶端來發送請求,這個未免效率太低,這裡就來介紹一個好用的工具–curl。

curl

curl是一個向服務器傳輸資料的工具,它支持http、https、ftp、ftps、scp、sftp、tftp、telnet等協議,這裡只針對http進行講解一些常用的用法,具體安裝請自行搜索。

打開百度

curl http://www.baidu.com

接著你就會看到百度的頁面原始碼輸出。

如果要把這個網頁儲存下來,可以這樣:

curl http://www.baidu.com > /tmp/baidu.html

你會看到一條進度條,然後原始碼就被重定向到了/tmp/baidu.html。

或者:

curl -o /tmp/baidu.html http://www.baidu.com

GET請求

預設直接請求一個url就是發出一個get請求,引數的話直接拼接在url里就好了,如

curl http://www.baidu.com/s?wd=curl

上述請求會上百度發起一條查詢請求,引數是wd=url

POST請求

curl -d “name=test&page;=1” http://www.baidu.com

**-d** 引數指定表單以POST的形式執行。

只展示Header

curl -I http://www.baidu.com

可以看到只傳回一些essay-header信息

HTTP/1.1 200 OK

Date: Fri, 07 Nov 2014 09:48:58 GMT

Content-Type: text/html; charset=utf-8

Connection: Keep-Alive

Vary: Accept-Encoding

Set-Cookie: BAIDUID=E9DB2F0AC95CB6BFDAD9D5CFDCED0A12:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com

Set-Cookie: BAIDUPSID=E9DB2F0AC95CB6BFDAD9D5CFDCED0A12; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com

Set-Cookie: BDSVRTM=0; path=/

Set-Cookie: BD_HOME=0; path=/

Set-Cookie: H_PS_PSSID=9725_9165_1465_7800_9452_9498_6504_9509_6018_9700_9757_9531_9478_7798_9453_9793_9024; path=/; domain=.baidu.com

P3P: CP=” OTI DSP COR IVA OUR IND COM “

Cache-Control: private

Cxy_all: baidu+3057b288b211c770a1463cc8519b62a8

Expires: Fri, 07 Nov 2014 09:48:17 GMT

X-Powered-By: HPHP

Server: BWS/1.1

BDPAGETYPE: 1

BDQID: 0xfa28eff900012706

BDUSERID: 0

顯示通信過程

-v引數可以顯示一次http通信的整個過程,包括端口連接和http request頭信息

curl -v www.baidu.com

* Adding handle: conn: 0x7ffe4b003a00

* Adding handle: send: 0

* Adding handle: recv: 0

* Curl_addHandleToPipeline: length: 1

* – Conn 0 (0x7ffe4b003a00) send_pipe: 1, recv_pipe: 0

* About to connect() to www.baidu.com port 80 (#0)

* Trying 61.135.169.125…

* Connected to www.baidu.com (61.135.169.125) port 80 (#0)

> GET / HTTP/1.1

> User-Agent: curl/7.30.0

> Host: www.baidu.com

> Accept: */*

>

< HTTP/1.1 200 OK

< Date: Fri, 07 Nov 2014 09:49:49 GMT

< Content-Type: text/html; charset=utf-8

< Transfer-Encoding: chunked

< Connection: Keep-Alive

< Vary: Accept-Encoding

< Set-Cookie: BAIDUID=062E02D23FBB651CF8455B699DF02B64:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com

< Set-Cookie: BAIDUPSID=062E02D23FBB651CF8455B699DF02B64; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com

< Set-Cookie: BDSVRTM=0; path=/

< Set-Cookie: BD_HOME=0; path=/

< Set-Cookie: H_PS_PSSID=7744_1429_7801_9583_9499_6506_6018_9769_9699_9757_9532_9477_7799_9453_9716_9023; path=/; domain=.baidu.com

< P3P: CP=" OTI DSP COR IVA OUR IND COM "

< Cache-Control: private

< Cxy_all: baidu+7dcb6b3c03d32c334d42f311919a14d6

< Expires: Fri, 07 Nov 2014 09:49:20 GMT

< X-Powered-By: HPHP

* Server BWS/1.1 is not blacklisted

< Server: BWS/1.1

< BDPAGETYPE: 1

< BDQID: 0xadb706860000088f

< BDUSERID: 0

如果你覺得上面的信息還不夠,那麼下麵的命令可以查看更詳細的通信過程。

curl –trace output.txt www.baidu.com

或者

curl –trace-ascii output.txt www.baidu.com

運行後,請打開output.txt檔案查看。

HTTP方法

curl預設的HTTP方法是GET,使用-X引數可以支持其他動詞。

curl -X POST www.example.com

curl -X DELETE www.example.com

Referer欄位

有時你需要在http request頭信息中,提供一個referer欄位,表示你是從哪裡跳轉過來的。

curl –referer http://www.example.com http://www.example.com

## User Agent欄位

這個欄位是用來表示客戶端的設備信息。服務器有時會根據這個欄位,針對不同設備,傳回不同格式的網頁,比如手機版和桌面版。

iPhone4的User Agent是

Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7

curl可以這樣模擬:

curl –user-agent “[User Agent]” [URL]

增加頭信息

有時需要在http request之中,自行增加一個頭信息。–essay-header引數就可以起到這個作用。

curl –essay-header “Content-Type:application/json” http://example.com

點擊“閱讀原文”可以閱讀原博客

赞(0)

分享創造快樂