简介
cURL,全称 CommandLine Uniform Resource Locator,是一个利用 URL 语法在命令行下工作的文件传输工具。
大多情况下,我们会使用 cURL 用于文件的下载,就像使用 wget 一样,然而它的功能不仅仅于此。利用 cURL,可以在命令行下模拟发出各种网络请求,通过添加适当的参数,可以得到和提取返回的数据,非常方便。
cURL 支持很多通信协议,基本上能想到的都支持。
常用方法
查看帮助
cURL 支持很多参数,使用 –help 可以查看所有参数的用法
1 | curl --help |
获得页面
1 | curl www.sina.com |
如果想将该页面保存下来,可以使用 -o 参数
1 | curl -o sina.html www.sina.com |
自动跳转
有的网址使用了重定向,使用 -L 参数,就可以跟踪重定向
1 | curl -L www.sina.com |
显示头信息
如果想要查看响应头信息,可以使用 -i 参数
1 | curl -i www.sina.com |
如果想只显示响应头信息,可以使用 -I 参数
1 | curl -I www.sina.com |
显示通信过程
添加 -v 参数可以显示一次通信的整个过程,包括了端口连接和请求头信息
1 | curl -v www.sina.com |
其中 > 表示发送的部分,< 表示接收的部分。
提交表单
表单提交支持 GET 和 POST 两种方法,GET 比较简单,数据直接跟在网址后面即可
1 | curl example.com/form.php?data=xxx |
POST 方法必须把数据和网址分开,并使用 –data 参数
1 | curl -X POST --data "data=xxx" example.com/form.php |
HTTP 动词
curl 默认的 HTTP 动词是 GET,使用 -X 参数可以支持其它动词
1 | curl -X POST www.example.com |
文件上传
假设文件上传的表单如下面这样
1 | <form method="POST enctype="multipart/form-data" action="form.php"> |
那么就可以使用 curl 像下面这样上传文件
1 | curl -F upload=@localfilename -F press=OK [URL] |
Referer 字段
如果需要在请求头信息里,提供一个 referer 字段,表示从哪里跳转过来的,可以使用 –referer 参数
1 | curl --referer www.example.com mail.example.com |
User Agent 字段
这个字段用来表示客户端的设备信息,服务器有时会根据这个字段,针对不同的设备,返回不同格式的网页,比如手机版和桌面版。
curl 可以使用 –user-agent 参数模拟不同的设备
1 | curl --user-agent "[User Agent]" [URL] |
使用 cookie
利用 –cookie 参数,curl 可以发送 cookie
1 | curl --cookie "name=xxx" www.example.com |
至于具体的 cookie 值,可以从响应头信息的 Set-Cookie 字段中得到。
增加头信息
有时需要在请求头信息里增加一个字段,这时可以使用 –header 参数
1 | curl --header "Content-Type:application/json" www.example.com |
HTTP 认证
有些网域需要 HTTP 认证,这时 curl 就需要使用 –user 参数
1 | curl --user name:password www.example.com |
以上内容参考阮老师文章:curl网站开发指南
关于 cURL 的更多信息:curl命令
在 PHP 中使用 cURL
PHP 开启 cURL 扩展之后,就可以使用各种 cURL 函数了。
在 PHP 里执行 cURL,需要遵循一个套路,学会这个套路,所有的请求就都学会了,套路很简单,如下
- 创建会话
- 配置参数
- 执行会话
- 关闭会话
没错,就是这个简单。
下面列出几个步骤对应的函数
1 | curl_init() 初始化一个 cURL 会话 |
发送 GET 请求
1 |
|
访问该文件,将会看到百度首页,其中第三步设置响应结果返回类型为 0,表示将执行结果直接输出,才看到了百度首页,设为 1 时,表示将结果存到变量里。
curl_setopt() 函数的参数非常之多,执行 cURL 会话之前的各种设置,比如 设置请求头、设置 URL、设置最长访问时间等等,都是通过该函数来实现,关于所有参数含义,见 官方文档。
发送 POST 请求
1 |
|
和 GET 方法相比,多设置了参数 CURLOPT_POSTFIELDS 和 CURLOPT_POST。
本文只给出最基本的 GET 和 POST 方法,至于其它使用方法,如 文件上传、HTTP 认证、使用 Cookie 等等,可以自己试着去探索。