PHP cURL 扩展库
cURL 是一个通用的库,并非 PHP 独有。PHP cURL 扩展库 是一个封装的函数库。可以用来模拟浏览器和服务器进行交互,功能比较强大。
1. 建立 cURL 请求
<?php
// 1. 初始化
$ch = curl_init();
// 2. 设置选项,包括 URL
curl_setopt($ch, CURLOPT_URL, "http://www.163100.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 将 curl_exec() 获取的信息以文件流的形式返回,而不是直接输出
curl_setopt($ch, CURLOPT_HEADER, 1); // 启动时会将头文件的信息作为数据流输出
curl_setopt($ch, CURLOPT_TIMEOUT, 60); // 设置 cURL 允许执行的最长秒数
// 3. 执行并获取 HTML 文档内容
$output = curl_exec($ch);
if ($output === false) {
echo 'cURL Error:' . curl_error($ch);
}
// 4. 释放 cURL 句柄
curl_close($ch);
echo $output;
很多时候并不需要 header 头,把 CURLOPT_HEADER 设为 0 或者不设置(默认为 0)。
2. 获取请求相关的信息
通过 curl_getinfo()
函数可以返回 cURL 执行后这一请求相关的信息,如下所示:
<?php
// ...
curl_exec($ch);
$info = curl_getinfo($ch);
echo '获取' . $info['url'] . '耗时' . $info['total_time'] . '秒';
// 返回 $info 数组如下
Array
(
[url] => http://www.163100.com
[content_type] => text/html; charset=UTF-8 // 内容编码
[http_code] => 200
[header_size] => 252 // header 的大小
[request_size] => 53 // 请求的大小
[filetime] => -1 // 文件创建时间
[ssl_verify_result] => 0 // SSL 验证结果
[redirect_count] => 0 // 跳转次数
[total_time] => 0.109 // 耗时
[namelookup_time] => 0 // DNS 查询时间
[connect_time] => 0.016 // 连接时间
[pretransfer_time] => 0.016 // 准备传输耗时
[size_upload] => 0 // 上传数据大小
[size_download] => 15903 // 下载数据大小
[speed_download] => 145899 // 下载速度
[speed_upload] => 0 // 上传速度
[download_content_length] => -1
[upload_content_length] => 0
[starttransfer_time] => 0.094 // 开始传输耗时
[redirect_time] => 0 // 重定向耗时
)
3. 在 cURL 中用 POST 方法发送数据
<?php
$url = "http://localhost/post.php";
$post_data = array(
'foo' => 'bar',
'query' => 'php',
'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);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$output = curl_exec($ch);
if ($output === false) {
echo 'cURL Error:' . curl_error($ch);
}
curl_close($ch);
echo $output;
4. 使用 cURL 上传文件
上传文件和 POST 类似,只需要把文件路径当作一个 POST 变量传过去,不过记得在前面加上 @ 符号。
<?php
// ...
$post_data = array(
'foo' => 'bar',
'upload' => '@test.zip'
);
// ....
参考资料: