导航
导航
文章目录
  1. 简介
  2. 常用方法
  3. 在 PHP 中使用 cURL

cURL 使用指南

简介

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
2
3
curl -X POST www.example.com

curl -X DELETE www.example.com

文件上传

假设文件上传的表单如下面这样

1
2
3
4
<form method="POST enctype="multipart/form-data" action="form.php">
<input type=file name="uoload">
<input type=submit name="press" value="OK">
</form>

那么就可以使用 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. 创建会话
  2. 配置参数
  3. 执行会话
  4. 关闭会话

没错,就是这个简单。

下面列出几个步骤对应的函数

1
2
3
4
curl_init()  初始化一个 cURL 会话
curl_setopt() 设置一个 cURL 会话的传输选项
curl_exec() 执行一个 cURL 会话
curl_close() 关闭一个 cURL 会话

发送 GET 请求

1
2
3
4
5
6
7
8
9
10
11
<?php
// 创建 cURL 会话
$ch = curl_init();
// 设置 URL
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com");
// 设置响应结果返回类型
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
// 执行 cURL 会话
curl_exec($ch);
//关闭 cURL 会话
curl_close($ch);

访问该文件,将会看到百度首页,其中第三步设置响应结果返回类型为 0,表示将执行结果直接输出,才看到了百度首页,设为 1 时,表示将结果存到变量里。

curl_setopt() 函数的参数非常之多,执行 cURL 会话之前的各种设置,比如 设置请求头、设置 URL、设置最长访问时间等等,都是通过该函数来实现,关于所有参数含义,见 官方文档

发送 POST 请求

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "http://localhost/xxx.php");
// 设置参数
curl_setopt($ch, CURLOPT_POSTFIELDS, "user=mrzhouxiaofei");
// 设置请求方法为 POST
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);

curl_exec($ch);

curl_close($ch);

和 GET 方法相比,多设置了参数 CURLOPT_POSTFIELDS 和 CURLOPT_POST。

本文只给出最基本的 GET 和 POST 方法,至于其它使用方法,如 文件上传、HTTP 认证、使用 Cookie 等等,可以自己试着去探索。