cURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP、FTP、TELNET等。
一般读取文件(URL)的方法是使用PHP内置的一些读文件函数,比如file_get_contents,file等;但是这些方法都只能进行简单的文件读取,不能实现复杂的功能:向URL POST数据、使用代理服务器、读取使用SSL协议的URL、URL登陆认证等。而cURL恰恰提供了对这些功能的支持。
然后重启apache
操作系统环境:Ubuntu12.04 X64
在使用curl之前先确认是否已经安装并且开启来curl模块。
如果没有安装或者开启curl模块,在使用curl的函数时候,会报错,函数没有定义。
安装curl模块:
apt-get install php5-curl
![基于PHP的curl的知识小结 - kaizhu_QIN - kaizhu_Qin 基于PHP的curl的知识小结 - kaizhu_QIN - kaizhu_Qin](http://img2.ph.126.net/2zK288QOBBsfrCyG9yu7kw==/1927259165638120364.png)
/etc/init.d/apache2 restart
在phpinfo可以看到curl模块相对应的信息:
![基于PHP的curl的知识小结 - kaizhu_QIN - kaizhu_Qin 基于PHP的curl的知识小结 - kaizhu_QIN - kaizhu_Qin](http://img2.ph.126.net/1iBWyfYosr9dpxnp7ykHeQ==/634444597523710346.png)
*****************************************************华华丽的分割线***********************************************
下面我们来总结下curl常见的功能:
建立cURL请求的方法:
1.初始化
使用curl_init方法初始化一个cURL句柄
$curl = curl_init("http://www.baidu.com/");
curl_init方法提供了一个可选参数URL,返回一个cURL句柄供curl_setopt(), curl_exec()和curl_close() 函数使用。
curl_setopt :设置一个cURL传输选项,或者使用curl_setopt_array批量设置一组参数。
如果在curl_init中没有指定URL,则需要在curl_setopt中手工设置这个值,如果指定了URL,则CURLOPT_URL被自动设成这个值。
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL,"
http://www.baidu.com/
"
);
curl_exec
:
执行一个cURL会话
这个函数应该在初始化一个cURL会话并且全部的选项都被设置后被调用。
成功时返回 TRUE, 或者在失败时返回 FALSE。 然而,如果 CURLOPT_RETURNTRANSFER选项被设置,函数执行成功时会返回执行的结果,失败时返回 FALSE 。
curl_close:关闭一个cURL会话
关闭一个cURL会话并且释放所有资源。cURL句柄curl也会被释放。
2.设置传输选项
CURLOPT_RETURNTRANSFER 将 curl_exec()获取的信息以文件流的形式存在变量返回,还是直接输出。
更多传输选项可以参考:http://php.net/manual/zh/function.curl-setopt.php
curl_getinfo($curl)获取一个cURL会话的信息。
curl_getinfo($curl)返回的数组中包括如下信息:
"url" //资源网络地址
"content_type" //内容编码
"http_code" //HTTP状态码
"header_size" //header的大小
"request_size" //请求的大小
"filetime" //文件创建时间
"ssl_verify_result" //SSL验证结果
"redirect_count" //跳转技术
"total_time" //总耗时
"namelookup_time" //DNS查询耗时
"connect_time" //等待连接耗时
"pretransfer_time" //传输前准备耗时
"size_upload" //上传数据的大小
"size_download" //下载数据的大小
"speed_download" //下载速度
"speed_upload" //上传速度
"download_content_length"//下载内容的长度
"upload_content_length" //上传内容的长度
"starttransfer_time" //开始传输的时间
"redirect_time"//重定向耗时
例如:我们设置
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1),即返回数据以文本流形式返回,不会在屏幕显示。
<?php
$ch = curl_init("http://www.baidu.com/");
echo "</br>";
$info = curl_getinfo($ch);
echo "<pre>";
print_r ($info);
echo "</pre>";
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
//echo $output;
curl_close($ch);
?>
![基于PHP的curl的知识小结 - kaizhu_QIN - kaizhu_Qin 基于PHP的curl的知识小结 - kaizhu_QIN - kaizhu_Qin](http://img0.ph.126.net/OOK4iK_Em4xiocCBUdQK-g==/2105432825895726573.png)
运行下:php curl.php
![基于PHP的curl的知识小结 - kaizhu_QIN - kaizhu_Qin 基于PHP的curl的知识小结 - kaizhu_QIN - kaizhu_Qin](http://img0.ph.126.net/OcGywxRpTPWFTw3Ia8CEdg==/1141943980615151712.png)
确实没有在屏幕显示。。返回的信息已经存储在$output里面。
现在我们来去掉 echo $output 的注释。
再次运行curl.php
![基于PHP的curl的知识小结 - kaizhu_QIN - kaizhu_Qin 基于PHP的curl的知识小结 - kaizhu_QIN - kaizhu_Qin](http://img0.ph.126.net/nBG_wIz_1ecwSmG364I3Tg==/3150549414422391498.png)
好吧,现在我们已经获取到了页面的代码,如果想实现自动采集信息,我们可以带页面的结构进行分析,利用正则表达式,提取到我们所需的信息。
当然,curl不仅仅是者点功能。curl可以:
使用代理服务器;
向URL POST数据;
使用浏览器用户代理;
访问SSL协议的URL。