curl 是常用的命令行工具,用来请求 Web 服务器。它的名字就是客户端(client)的 URL 工具的意思。
它的功能非常强大,命令行参数多达几十种。如果熟练的话,完全可以取代 Postman 这一类的图形界面工具
我们可以使用cURL执行一些有用的技巧,如代理支持、用户身份验证、FTP上传、HTTP post、SSL连接、cookie、文件传输恢复、Metalink等等。
常用命令分类:
# 调试类 -v, --verbose 输出信息 -q, --disable 在第一个参数位置设置后 .curlrc 的设置直接失效,这个参数会影响到 -K, --config -A, --user-agent -e, --referer -K, --config FILE 指定配置文件 -L, --location 跟踪重定向 (H) # CLI显示设置 -s, --silent Silent模式。不输出任务内容 -S, --show-error 显示错误. 在选项 -s 中,当 curl 出现错误时将显示 -f, --fail 不显示 连接失败时HTTP错误信息 -i, --include 显示 response的header (H/F) -I, --head 仅显示 响应文档头 -l, --list-only 只列出FTP目录的名称 (F) -#, --progress-bar 以进度条 显示传输进度 # 数据传输类 -X, --request [GET|POST|PUT|DELETE|…] 使用指定的 http method 例如 -X POST -H, --header <header> 设定 request里的header 例如 -H "Content-Type: application/json" -e, --referer 设定 referer (H) -d, --data <data> 设定 http body 默认使用 content-type application/x-www-form-urlencoded (H) --data-raw <data> ASCII 编码 HTTP POST 数据 (H) --data-binary <data> binary 编码 HTTP POST 数据 (H) --data-urlencode <data> url 编码 HTTP POST 数据 (H) -G, --get 使用 HTTP GET 方法发送 -d 数据 (H) -F, --form <name=string> 模拟 HTTP 表单数据提交 multipart POST (H) --form-string <name=string> 模拟 HTTP 表单数据提交 (H) -u, --user <user:password> 使用帐户,密码 例如 admin:password -b, --cookie <data> cookie 文件 (H) -j, --junk-session-cookies 读取文件中但忽略会话cookie (H) -A, --user-agent user-agent设置 (H) # 传输设置 -C, --continue-at OFFSET 断点续转 -x, --proxy [PROTOCOL://]HOST[:PORT] 在指定的端口上使用代理 -U, --proxy-user USER[:PASSWORD] 代理用户名及密码 # 文件操作 -T, --upload-file <file> 上传文件 -a, --append 添加要上传的文件 (F/SFTP) # 输出设置 -o, --output <file> 将输出写入文件,而非 stdout -O, --remote-name 将输出写入远程文件 -D, --dump-header <file> 将头信息写入指定的文件 -c, --cookie-jar <file> 操作结束后,要写入 Cookies 的文件位置
cURL 查看网页源码
直接在 cURL 命令后加上网址,就可以看到网页源码。
默认 cURL 会把结果输出到 STDOUT,可以使用 -o,-o 或 重定向 将返回结果保存到文件中:
curl -o [文件名] www.baidu.com curl -O [文件保存路径] www.baidu.com curl www.baidu.com > baidu.html
使用 cURL 观察 HTTP 协议
使用 cURL 的参数 -v,–verbose,会显示出 cURL 向服务器发送的命令和其它的一些信息。–verbose 是一个非常有用的命令,尤其是当你想调试或者了解 cURL 和服务器交互过程的时候。
curl –v www.baidu.com
随后我们就可以观察服务器返回的结果:
从输出结果我们可以看到,cURL 命令发起请求所使用的请求方法、请求资源、请求协议版本以及一些请求头。服务器接收到请求后则返回状态码、一些响应头以及网页正文。
如果我们只需要服务器的响应信息的话,可以使用 -i、--include 命令。
如果你觉得上面的信息还不够,那么下面的命令可以查看更详细的通信过程。curl --trace [结果输出保存文件名] http://www.baidu.com
从上面的例子中,我们可以看到,当我们请求 http://www.baidu.com 成功之后,服务器会返回一个 302 跳转码,并在响应头中通过 Location 告诉访问者应该跳转到哪里去。
cURL 提供了重定向跟随的功能,通过 -L 参数就可以响应服务器返回的跳转指令了。
curl –L www.baidu.com
可以看到 cURL 自动跳转访问 https://www.baidu.com/ 去了。
使用 cURL 向服务器发送数据
向服务器提交数据的方法有两种:GET 和 POST 两种方法。
GET 方式比较简单,需要传递的参数直接在 URL 地址中进行传递即可。
curl -vo /dev/null http://www.baidu.com/s?wd=curl
其中 wd 就是百度服务器接收搜索关键字的参数名。
POST 方法必须把数据和网址分开,我们就需要使用 -X 参数来指定请求方法,-F 参数来传递表单数据。
使用 cURL 测试代理访问
使用 CDN 有时候会发现请求异常,为了确定是 CDN 平台的故障还是源站出现了问题,我们就需要依次来排查。cURL 工具可以使用 -x 参数来指定代理主机端口来访问。
curl -x [protocol://]host[:port] url
文章评论