cURL是利用URL语法在命令行方式下工作的开源文件传输工具。
PHP中关于cURL函数:
1.基本实现步骤
序号 | 函数 | 说明 |
---|---|---|
1 | curl_init() | 初始化一个curl对象,创建一个新cURL资源 |
2 | curl_setopt() | 设置URL和相应的选项 |
3 | curl_exec() | 执行相关事务并把结果传递给浏览器 |
4 | curl_close() | 关闭cURL资源,并且释放系统资源 |
/*远程获取百度网页数据: */
<?php
$curl = curl_init(); //初始curl化对象
curl_setopt($curl,CURLOPT_URL,'http://www.baidu.com'); //设置url
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); //设置是否输出到页面
$output = curl_exec($curl); //执行
//echo $output;
curl_close($curl); //关闭curl资源
?>
2.使用curl_getinfo()函数获取输出信息
/*获取curl请求的输出信息*/
$output = curl_exec($curl);
$info = curl_getinfo($curl);
print_r($info['url']);//结果:http://www.baidu.com/
curl_getinfo返回的相关信息可查看:
3.使用curl发送GET请求
http_build_query — 该函数接受一个关联数组,返回由该关联数据描述的GET请求字符串
curl_setopt_array — 为cURL传输会话批量设置选项
$url = "www.xxx.com";
$data = array();
$data['name'] = 'delia';
$data['pwd'] = '123456';
$curl_options = array(
CURLOPT_URL => $url.'?'.http_build_query($data)
,CURLOPT_HEADER => FALSE
,CURLOPT_RETURNTRANSFER => TRUE
,CURLOPT_TIMEOUT => 25
);
$curl = curl_init();
curl_setopt_array($curl, $curl_options);
curl_exec($curl);
4.使用curl发送POST请求
可以使用CURL提供的选项CURLOPT_POSTFIELDS
CURL_POST为true,表示这个请求是一个POST请求
POST请求中也是可以传输GET数据的,只需要在URL中拼装GET请求数据即可
$url = "www.xxx.com";
$post_data = array("name"=>"delia","pwd"=>"123456");
$curl_options = array(
CURLOPT_URL => $url
,CURLOPT_HEADER => FALSE
,CURLOPT_POST => TRUE
,CURLOPT_RETURNTRANSFER => TRUE
,CURLOPT_POSTFIELDS => $post_data
,CURLOPT_TIMEOUT => 25
);
$curl = curl_init();
curl_setopt_array($curl, $curl_options);
$response = curl_exec($curl);
补充:
以上方式获取到的数据为json格式,需使用json_decode函数解析成数组。
$response_array = json_decode($response,TRUE);
如果使用json_decode($response)解析的话,将会得到object类型的数据。
/*接受php页面远程服务器:*/
<?php
if(isset($_POST['name']))
{
if(!empty($_POST['name']))
{
echo 'hello,'.$_POST['name'].'!'; //hello,delia!
}
}
?>
5.使用curl_errno()&&curl_error ()返回错误编号及信息
curl_errno()&&curl_error ()返回的相关信息可查看:
http://php.net/manual/zh/function.curl-errno.php
6. cURL模拟session登录
<?php
//************ cURL模拟session登录 ************
//************ 设置session 开始
$setUrl='http://localhost/curl-login/session.php?act=set';
//创建一个用于存放cookie信息的临时文件, //******注意这里
$cookiefile = tempnam("./tmp","cookies");
// 初始化一个curl对象
$curl = curl_init();
//设置要抓取的URL
curl_setopt($curl,CURLOPT_URL,$setUrl);
//设置curl参数:抓取的结果是保存到字符串中还是输出到屏幕上,
//1表示将结果不输出到屏幕上;0表示将结果输出到屏幕上
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
// 是否将头文件的信息作为数据流输出
curl_setopt($curl,CURLOPT_HEADER,true);
// 包含cookie数据的文件名
curl_setopt($curl,CURLOPT_COOKIEFILE,$cookiefile);
// 连接结束后保存cookie信息的文件
curl_setopt($curl,CURLOPT_COOKIEJAR,$cookiefile);
//执行curl,请求网页
$data = curl_exec($curl);
//echo $data;
//关闭url请求
curl_close($curl);
//************ 设置session 结束
//************ 获取session 开始
$getUrl='http://localhost/curl-login/session.php?act=get';
// 初始化一个curl对象
$curl = curl_init();
//设置要抓取的URL
curl_setopt($curl,CURLOPT_URL,$getUrl);
//设置curl参数:抓取的结果是保存到字符串中还是输出到屏幕上,
//1表示将结果不输出到屏幕上;0表示将结果输出到屏幕上
curl_setopt($curl,CURLOPT_RETURNTRANSFER,0);
// 是否将头文件的信息作为数据流输出
curl_setopt($curl,CURLOPT_HEADER,true);
// 包含cookie数据的文件名
curl_setopt($curl,CURLOPT_COOKIEFILE,$cookiefile);
//执行curl,请求网页
$data = curl_exec($curl);
//echo $data;
//关闭url请求
curl_close($curl);
//************ 获取session 结束
?>
7. cURL请求HTTPS含证书
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 重要!模拟用户使用的浏览器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl); // 执行操作
curl_close($curl); // 关闭CURL会话
$tmpInfo=json_decode($tmpInfo,true);// 返回数据
参考资料: