cURL 是一个利用URL 语法规定来传输文件和数据的工具,支持很多协议,如HTTP 、FTP 、TELNET 等。更让人高兴的是,PHP 也支持 cURL 库。本文将介绍PHP 中如何运用它。
基本结构
先来看一下在PHP 中建立cURL 请求的基本步骤:
- 初始化
- 设置变量
- 执行并获取结果
- 释放cURL 句柄
1. 初始化
$ch = curl_init();
2. 设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, “http://www.nettuts.com”);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
3. 执行并获取HTML 文档内容
$output = curl_exec($ch);
4. 释放curl 句柄
curl_close($ch);
第二步(也就是 curl_setopt() )最为关键,有一长串cURL 参数可供设置,它们能指定URL 请求的各个细节。要一次性全部看完并理解可能比较困难,所以今天我们只试一下那些常用也更有用的选项。
检查错误
你可以加一段检查错误的语句(虽然这并不是必需的):
// …
$output = curl_exec($ch);
if ($output === FALSE) {
echo “cURL Error: ” . curl_error($ch);
}
// …
注意,比较的时候我们用的是“=== FALSE” ,而非“== FALSE” 。因为我们得区分空输出和布尔值FALSE ,后者才是真正的错误。
用POST 方法发送数据
当发起GET 请求时,数据可以通过“ 查询字串” (query string )传递给一个URL 。例如,在google 中搜索时,搜索关键即为URL 的查询字串的一部分:
http://www.google.com/search?q=nettuts
这种情况下你可能并不需要cURL 来模拟。把这个URL 丢给“file_get_contents()” 就能得到相同结果。
不过有一些HTML 表单是用POST 方法提交的。这种表单提交时,数据是通过 HTTP 请求体(request body ) 发送,而不是查询字串。例如,当使用CodeIgniter 论坛的表单,无论你输入什么关键字,总是被POST 到如下页面:
http://codeigniter.com/forums/do_search/
你可以用PHP 脚本来模拟这种URL 请求。首先,新建一个可以接受并显示POST 数据的文件,我们给它命名为post_output.php :
print_r($_POST);
接下来,写一段PHP 脚本来执行cURL 请求:
$url = “http://localhost/post_output.php”;
$post_data = array (
“foo” => “bar”,
“query” => “Nettuts”,
“action” => “Submit”
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 我们在POST 数据哦!
curl_setopt($ch, CURLOPT_POST, 1);
// 把post 的变量加上
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
这段脚本发送一个POST 请求给 post_output.php ,这个页面 $_POST 变量并返回,我们利用cURL 捕捉了这个输出。
小结
今天我们一起学习了cURL 库。希望你喜欢。下一次如果要发起URL 请求时,请考虑下cURL 吧!