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 接口出现问题时,咱们就能够直接发送这段命令给其余开发者,只需粘贴到终端运行,便能知道问题所在,能够说是至关的方便。
参考资料