9个值得知道的cURL的用法
对于 HTTP 工程师和 API 设计师来说,使用命令行操作 HTTP 是非常有用的技能。cURL
库和 curl
命令可以给你设计请求,放入管道并查看相应的能力。curl
能力的缺点在于它能覆盖多广的
命令选项。使用 curl --help
会展示出150条不同的选项。这篇文章演示了9个基本的,现实程序用到的 curl
命令。
在这篇教程中我们会使用httpkit的 echo 服务做为端点,回显服务的响应 是它收到 HTTP 请求的 JSON 表示。
创建请求
我们从最简单的 curl
命令开始。
请求
curl http://echo.httpkit.com |
响应
{ |
就这样,我们用 curl
创建了一个请求,curl
使用的 HTTP 动词默认为 GET
,请求的资源指向的是
httpkit 的 echo 服务:http://echo.httpkit.com
。
你可以添加路径和查询变量:
请求
curl http://echo.httpkit.com//path?query=string |
响应
{ ... |
设置请求方法
curl
默认的请求方法为 GET
,可以用 -X
参数设置成任何你想要的方法,通常为 POST
,PUT
,DELETE
方法,甚至是自定义的方法。
请求
curl -X POST echo.httpkit.com |
响应
{ |
正如你看到的,http://
协议前缀可以不使用,因为这是默认假定的。接着实施 DELETE
方法:
请求
curl -X DELETE echo.httpkit.com |
响应
{ |
设置请求头部
请求头部允许客户端给服务器提供诸如授权,内容类型等信息。比如,OAuth2 使用 Authorization
头
来传递访问令牌(access tokens)。curl
使用 -H
选项设置自定义头部。
请求
curl -H "Authorization: OAuth 2c4419d1aabeec" \ |
响应
{... |
可以使用 -H
多次来设置多个头部。
请求
curl -H "Accept: application/json" \ |
响应
{ ... |
发送请求体
现今许多有名的 HTTP API 使用 application/json
和 application/xml
来 POST
和 PUT
资源,
而不是用HTML化的数据。我们试试 PUT
一些 JSON 数据到服务器上。
请求
curl -X PUT \ |
响应
{ |
使用文件作为请求体
将 JSON/XML 写到命令行中是令人头疼的,尤其有时这个文件很大时。幸运的是, curl
的 @readfile
可以很容易地读取文件的文本。如果上面例子中的 JSON 保存为文件 example.json
, 我们可以这么做:
请求
curl -X PUT \ |
发送 HTML 表单数据
如果不能发送带有数据的请求体,可以设置类似 POST
的方法真是没什么用。也许我们可以试试发送 HTML
表单数据。使用 -d
选项,我们可以制定 URL 编码的名称和值。
请求
curl -d "firstName=Kris" \ |
响应
{ |
注意到 POST
这个方法,即使我们没有指明方法,当 curl
看到表单数据时它会指定 POST
方法。
可以使用 -X
选项来覆盖这个方法。请求的 Content-Type
也被自动设置为 application/x-www-form-urlencoded
,
这样服务器就知道怎么解析数据了。最终,请求体由编码了每一个表单域的 URL 构成。
发送 HTML Multipart/file 表单(上传文件)
当涉及到文件上传的表单时,正如你从写上传文件表单时知道的那样,这些使用 multipart/form-data
文本类型,
带有 enctype
属性。cURL 使用 -F
配合上面介绍的 @readFile
宏来处理。
请求
curl -F "firstName=Kris" \ |
响应
{ |
像 -d
选项一样,当使用 -d
选项时 curl
会自动地默认使用 POST
方法,multipart/form-data
文件
类型头部,计算长度并组成请求体。请注意 @readFile
宏是怎样读取一个文件的文本为任何字符的,这个不是
一个单独的操作,;text/plain
指定了文件的 MIME 文本类型。在未指定的情况下,curl
会尝试嗅探文本类型。
测试虚拟主机,不使用 DNS
通常,在不修改 DNS 覆盖主机的情况下测试一个虚拟主机或者是缓存代理时很有用的。只需使用 cURL 将请求指向
主机的 IP 地址 并覆写 Host
头。
请求
curl -H "Host: google.com" 50.112.251.120 |
响应
{ |
查看响应头部
API 正越来越多的利用响应头部来提供授权,速率限制,缓存等方面的信息。cURL 使用 -i
选项来查看响应头部
和响应体。
请求
curl -i echo.httpkit.com |
响应
HTTP/1.1 200 OK |
原文:9 uses for cURL worth knowing