curl 是很方便的Rest客戶端,可以很方便的完成許多Rest API測(cè)試的需求,甚至,如果是需要先登入或認(rèn)證的rest api,也可以進(jìn)行測(cè)試,利用curl指令,可以送出HTTP GET, POST, PUT, DELETE, 也可以改變 HTTP header來(lái)滿足使用REST API需要的特定條件。 curl的參數(shù)很多,這邊僅列出目前測(cè)試REST時(shí)常用到的: -X/--request [GET|POST|PUT|DELETE|…] 使用指定的http method發(fā)出 http request-H/--header 設(shè)定request裡的header-i/--include 顯示response的header-d/--data 設(shè)定 http parameters -v/--verbose 輸出比較多的訊息-u/--user 使用者帳號(hào)、密碼-b/--cookie cookie linux command line 的參數(shù)常,同一個(gè)功能常會(huì)有兩個(gè)功能完全相同參數(shù),一個(gè)是比較短的參數(shù),前面通常是用-(一個(gè)-)導(dǎo)引符號(hào),另一個(gè)比較長(zhǎng)的參數(shù),通常會(huì)用--(兩個(gè)-)導(dǎo)引符號(hào) 在curl 使用說(shuō)明 -X, --request COMMAND Specify request command to use --resolve HOST:PORT:ADDRESS Force resolve of HOST:PORT to ADDRESS --retry NUM Retry request NUM times if transient problems occur --retry-delay SECONDS When retrying, wait this many seconds between each --retry-max-time SECONDS Retry only within this period> 參數(shù)-X跟--request兩個(gè)功能是一樣的,所以使用時(shí) ex:curl -X POST http://www./ 跟 curl--request POST http://www./ 是相等的功能 GET/POST/PUT/DELETE使用方式 -X 後面加 http method, curl -X GET 'http://www./api/users'curl -X POST 'http://www./api/users'curl -X PUT 'http://www./api/users'curl -X DELETE 'http://www./api/users' url要加引號(hào)也可以,不加引號(hào)也可以,如果有非純英文字或數(shù)字外的字元,不加引號(hào)可能會(huì)有問(wèn)題,如果是網(wǎng)碼過(guò)的url,也要加上引號(hào) HEADER 在http header加入的訊息 curl -v -i -H 'Content-Type: application/json' http://www./users HTTP Parameter http參數(shù)可以直接加在url的query string,也可以用-d帶入?yún)?shù)間用&串接,或使用多個(gè)-d # 使用`&`串接多個(gè)參數(shù) curl -X POST -d 'param1=value1¶m2=value2' # 也可使用多個(gè)`-d`,效果同上 curl -X POST -d 'param1=value1' -d 'param2=value2'curl -X POST -d 'param1=a 0space' # 'a space' url encode後空白字元會(huì)編碼成'%20'為'a%20space',編碼後的參數(shù)可以直接使用 curl -X POST -d 'param1=a%20space' post json 格式得資料 如同時(shí)需要傳送request parameter跟json,request parameter可以加在url後面,json資料則放入-d的參數(shù),然後利用單引號(hào)將json資料含起來(lái)(如果json內(nèi)容是用單引號(hào),-d的參數(shù)則改用雙引號(hào)包覆),header要加入”Content-Type:application/json”跟”Accept:application/json” curl http://www.?modifier=kent -X PUT -i -H 'Content-Type:application/json' -H 'Accept:application/json' -d '{'boolean' : false, 'foo' : 'bar'}' # 不加'Accept:application/json'也可以 curl http://www.?modifier=kent -X PUT -i -H 'Content-Type:application/json' -d '{'boolean' : false, 'foo' : 'bar'}' 需先認(rèn)證或登入才能使用的service 許多服務(wù),需先進(jìn)行登入或認(rèn)證後,才能存取其API服務(wù),依服務(wù)要求的條件,的curl可以透過(guò)cookie,session或加入在header加入session key,api key或認(rèn)證的token來(lái)達(dá)到認(rèn)證的效果。 session 例子: 後端如果是用session記錄使用者登入資訊,後端會(huì)傳一個(gè) session id給前端,前端需要在每次跟後端的requests的header中置入此session id,後端便會(huì)以此session id識(shí)別前端是屬於那個(gè)session,以達(dá)到session的效果 curl --request GET 'http://www./api/users' --header 'sessionid:1234567890987654321' cookie 例子 如果是使用cookie,在認(rèn)證後,後端會(huì)回一個(gè)cookie回來(lái),把該cookie成檔案,當(dāng)要存取需要任務(wù)的url時(shí),再用-b cookie_file 的方式在request中植入cookie即可正常使用 # 將cookie存檔 curl -i -X POST -d username=kent -d password=kent123 -c ~/cookie.txt http://www./auth # 載入cookie到request中 curl -i --header 'Accept:application/json' -X GET -b ~/cookie.txt http://www./users/1 檔案上傳 curl -i -X POST -F 'file=@/Users/kent/my_file.txt' -F 'name=a_file_name' 這個(gè)是透過(guò) HTTP multipart POST 上傳資料, -F 是使用http query parameter的方式,指定檔案位置的參數(shù)要加上@ HTTP Basic Authentication (HTTP基本認(rèn)證) 如果網(wǎng)站是採(cǎi)HTTP基本認(rèn)證, 可以使用 --user username:password 登入 curl -i --user kent:secret http://www./api/foo' 認(rèn)證失敗時(shí),會(huì)是401 Unauthorized HTTP/1.1 401 UnauthorizedServer: Apache-Coyote/1.1X-Content-Type-Options: nosniffX-XSS-Protection: 1; mode=blockCache-Control: no-cache, no-store, max-age=0, must-revalidatePragma: no-cacheExpires: 0X-Frame-Options: DENYWWW-Authenticate: Basic realm='Realm'Content-Type: text/html;charset=utf-8Content-Language: enContent-Length: 1022Date: Thu, 15 May 2014 06:32:49 GMT認(rèn)證通過(guò)時(shí),會(huì)回應(yīng) 200 OKHTTP/1.1 200 OKServer: Apache-Coyote/1.1X-Content-Type-Options: nosniffX-XSS-Protection: 1; mode=blockCache-Control: no-cache, no-store, max-age=0, must-revalidatePragma: no-cacheExpires: 0X-Frame-Options: DENYSet-Cookie: JSESSIONID=A75066DCC816CE31D8F69255DEB6C30B; Path=/mdserver/; HttpOnlyContent-Type: application/json;charset=UTF-8Transfer-Encoding: chunkedDate: Thu, 15 May 2014 06:14:11 GMT 可以把認(rèn)證後的cookie存起來(lái),重複使用 curl -i --user kent:secret http://www./api/foo' -c ~/cookies.txt 登入之前暫存的cookies,可以不用每次都認(rèn)證 curl -i http://www./api/foo' -b ~/cookies.txt
|
|