告别 Postman、ARC、DHC,拥抱 curl
2016-09-17 · 992 chars · 5 min read
今年一直在公司折腾 nodejs,实实在在的体会了一把“随便玩玩”和“真正投产”的区别。在各种环境,各种防火墙,各种权限中对程序做验证,少不了 curl 这个神器,只要掌握几个简单的命令,完全可以抛弃 Postman、ARC、DHC、REST Console 等“好用”的 chrome 扩展。
在介绍前,我需要先做两点说明:
- 下面的例子中会使用 httpbin.org,httpbin 提供客户端测试 http 请求的服务,非常好用,具体可以查看他的网站。
- 大部分没有使用缩写形式的参数,例如我使用
--request
而不是-X
,这是为了好记忆。
下面开始简单介绍几个命令:
直接获取(GET)一个 url#
直接以个 GET 方式请求一个 url,输出返回内容:
curl httpbin.org
返回
<!DOCTYPE html> <html> <head> <meta http-equiv='content-type' value='text/html;charset=utf8'> <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'> <title>httpbin(1): HTTP Client Testing Service</title> <style type='text/css' media='all'> /* style: man */ body#manpage {margin:0} .mp {max-width:100ex;padding:0 9ex 1ex 4ex} .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0} .mp h2 {margin:10px 0 0 0} ......
post,put 等#
使用--request
指定请求类型,--data
指定数据,例如:
curl httpbin.org/post --request POST --data "name=keenwon&website=http://keenwon.com"
返回:
{ "args": {}, "data": "", "files": {}, "form": { "name": "keenwon", "website": "http://keenwon.com" }, "headers": { "Accept": "*/*", "Content-Length": "39", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "curl/7.43.0" }, "json": null, "origin": "180.157.173.141", "url": "http://httpbin.org/post" }
这个返回值是 httpbin 输出的,可以清晰的看出我们发送了什么数据,非常实用。
form 表单提交#
form 表单提交使用--form
,使用@
指定本地文件,例如我们提交一 个表单,有字段 name 和文件 f:
curl httpbin.org/post --form "name=keenwon" --form "f=@/Users/keenwon/Desktop/a.txt"
返回:
{ "args": {}, "data": "", "files": { "f": "hello, world!" }, "form": { "name": "keenwon" }, "headers": { "Accept": "*/*", "Content-Length": "293", "Content-Type": "multipart/form-data; boundary=------------------------5bff0fea23249059", "Host": "httpbin.org", "User-Agent": "curl/7.43.0" }, "json": null, "origin": "180.157.173.141", "url": "http://httpbin.org/post" }
显示头信息#
使用--include
在输出中包含头信息,使用--head
只返回头信息,例如:
curl httpbin.org/post --include --request POST --data "name=keenwon"
返回:
HTTP/1.1 200 OK Server: nginx Date: Sat, 17 Sep 2016 07:46:12 GMT Content-Type: application/json Content-Length: 364 Connection: keep-alive Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true { "args": {}, "data": "", "files": {}, "form": { "name": "keenwon" }, "headers": { "Accept": "*/*", "Content-Length": "12", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "curl/7.43.0" }, "json": null, "origin": "180.157.173.141", "url": "http://httpbin.org/post" }
再例如,只显示头信息的话:
curl httpbin.org --head
返回:
HTTP/1.1 200 OK Server: nginx Date: Sat, 17 Sep 2016 07:49:52 GMT Content-Type: text/html; charset=utf-8 Content-Length: 12150 Connection: keep-alive Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true
详细显示通信过程#
使用--verbose
显示通信过程,例如:
curl httpbin.org/post --verbose --request POST --data "name=keenwon"
返回:
* Trying 23.22.14.18... * Connected to httpbin.org (23.22.14.18) port 80 (#0) > POST /post HTTP/1.1 > Host: httpbin.org > User-Agent: curl/7.43.0 > Accept: */* > Content-Length: 12 > Content-Type: application/x-www-form-urlencoded > * upload completely sent off: 12 out of 12 bytes < HTTP/1.1 200 OK < Server: nginx < Date: Sat, 17 Sep 2016 07:59:31 GMT < Content-Type: application/json < Content-Length: 364 < Connection: keep-alive < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < { "args": {}, "data": "", "files": {}, "form": { "name": "keenwon" }, "headers": { "Accept": "*/*", "Content-Length": "12", "Content-Type": "application/x-www-form-urlencoded", "Host": "httpbin.org", "User-Agent": "curl/7.43.0" }, "json": null, "origin": "180.157.173.141", "url": "http://httpbin.org/post" } * Connection #0 to host httpbin.org left intact
设置头信息#
使用--header
设置头信息,httpbin.org/headers 会显示请求的头信息,我们测试下:
curl httpbin.org/headers --header "a:1"
返回:
{ "headers": { "A": "1", "Accept": "*/*", "Host": "httpbin.org", "User-Agent": "curl/7.43.0" } }
同样的,可以使用--header
设置 User-Agent 等。
Referer 字段#
设置 Referer 字段很简单,使用--referer
,例如:
curl httpbin.org/headers --referer http://keenwon.com
返回:
{ "headers": { "Accept": "*/*", "Host": "httpbin.org", "Referer": "http://keenwon.com", "User-Agent": "curl/7.43.0" } }
包含 cookie#
使用--cookie
来设置请求的 cookie,例如:
curl httpbin.org/headers --cookie "name=keenwon;website=http://keenwon"
返回:
{ "headers": { "Accept": "*/*", "Cookie": "name=keenwon;website=http://keenwon", "Host": "httpbin.org", "User-Agent": "curl/7.43.0" } }
自动跳转#
使用--location
参数会跟随链接的跳转,例如:
curl httpbin.org/redirect/1 --location
httpbin.org/redirect/1 会 302 跳转,所以返回:
{ "args": {}, "headers": { "Accept": "*/*", "Host": "httpbin.org", "User-Agent": "curl/7.43.0" }, "origin": "180.157.173.141", "url": "http://httpbin.org/get" }
http 认证#
当页面需要认证时,可以使用--user
,例如:
curl httpbin.org/basic-auth/keenwon/123456 --user keenwon:123456
返回:
{ "authenticated": true, "user": "keenwon" }