cURL使用

cURL 是很方便的Rest客戶端,可以很方便的完成許多Rest API測試的需求,甚至,如果是需要先登入或認證的rest api,也可以進行測試,利用*curl*指令,可以送出HTTP GET, POST, PUT, DELETE, 也可以改變 HTTP header來滿足使用REST API需要的特定條件。
curl的參數很多,這邊僅列出目前測試REST時常用到的:
-X/--request [GET|POST|PUT|DELETE|…] 使用指定的http method發出 http request-H/--header 設定request裡的header-i/--include 顯示response的header-d/--data 設定 http parameters -v/--verbose 輸出比較多的訊息-u/--user 使用者帳號、密碼-b/--cookie cookie 

linux command line 的參數常,同一個功能常會有兩個功能完全相同參數,一個是比較短的參數,前面通常是用-
(一個-
)導引符號,另一個比較長的參數,通常會用--
(兩個-
)導引符號
在curl 使用說明
 -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>

參數-X
跟--request
兩個功能是一樣的,所以使用時ex:curl -X POST http://www.example.com/
跟curl --request POST http://www.example.com/
是相等的功能

GET/POST/PUT/DELETE使用方式
-X 後面加 http method,
curl -X GET "http://www.rest.com/api/users"curl -X POST "http://www.rest.com/api/users"curl -X PUT "http://www.rest.com/api/users"curl -X DELETE "http://www.rest.com/api/users"

url要加引號也可以,不加引號也可以,如果有非純英文字或數字外的字元,不加引號可能會有問題,如果是網碼過的url,也要加上引號
HEADER
在http header加入的訊息
curl -v -i -H "Content-Type: application/json" http://www.example.com/users

HTTP Parameter
http參數可以直接加在url的query string,也可以用-d
帶入參數間用&
串接,或使用多個-d

# 使用`&`串接多個參數curl -X POST -d "param1=value1&param2=value2"# 也可使用多個`-d`,效果同上curl -X POST -d "param1=value1" -d "param2=value2"curl -X POST -d "param1=a 0space" # "a space" url encode後空白字元會編碼成'%20'為"a%20space",編碼後的參數可以直接使用curl -X POST -d "param1=a%20space" 

post json 格式得資料
如同時需要傳送request parameter跟json,request parameter可以加在url後面,json資料則放入-d
的參數,然後利用單引號將json資料含起來(如果json內容是用單引號,-d的參數則改用雙引號包覆),header要加入”Content-Type:application/json”跟”Accept:application/json”
curl http://www.example.com?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.example.com?modifier=kent -X PUT -i -H "Content-Type:application/json" -d '{"boolean" : false, "foo" : "bar"}'

需先認證或登入才能使用的service
許多服務,需先進行登入或認證後,才能存取其API服務,依服務要求的條件,的curl可以透過cookie,session或加入在header加入session key,api key或認證的token來達到認證的效果。
session 例子:
後端如果是用session記錄使用者登入資訊,後端會傳一個 session id給前端,前端需要在每次跟後端的requests的header中置入此session id,後端便會以此session id識別前端是屬於那個session,以達到session的效果
curl --request GET 'http://www.rest.com/api/users' --header 'sessionid:1234567890987654321'

cookie 例子
如果是使用cookie,在認證後,後端會回一個cookie回來,把該cookie成檔案,當要存取需要任務的url時,再用-b cookie_file
的方式在request中植入cookie即可正常使用
# 將cookie存檔curl -i -X POST -d username=kent -d password=kent123 -c ~/cookie.txt http://www.rest.com/auth# 載入cookie到request中 curl -i --header "Accept:application/json" -X GET -b ~/cookie.txt http://www.rest.com/users/1

檔案上傳
curl -i -X POST -F 'file=@/Users/kent/my_file.txt' -F 'name=a_file_name'

這個是透過 HTTP multipart POST 上傳資料,-F
是使用http query parameter的方式,指定檔案位置的參數要加上@

HTTP Basic Authentication (HTTP基本認證)
如果網站是採HTTP基本認證, 可以使用--user username:password
登入
curl -i --user kent:secret http://www.rest.com/api/foo' 

認證失敗時,會是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

認證通過時,會回應200 OK

HTTP/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

可以把認證後的cookie存起來,重複使用
curl -i --user kent:secret http://www.rest.com/api/foo' -c ~/cookies.txt

登入之前暫存的cookies,可以不用每次都認證
curl -i http://www.rest.com/api/foo' -b ~/cookies.txt

相關資源
http://linux.about.com/od/commands/l/blcmdl1_curl.htm - curl 手冊
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容