PHP的cURL库功能简介 抓取网页、POST数据及其他


Posted in PHP onApril 07, 2011

无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,反应釜cURL 是一个功能强大的PHP库。本文主要讲述如果使用这个PHP库。

启用 cURL 设置

首先,我们得先要确定我们的PHP是否开启了这个库,你可以通过使用php_info()函数来得到这一信息。

<?php 
phpinfo(); 
?>

如果你可以在网页上看到下面的输出,那么表示cURL库已被开启。

如果你看到的话,那么你需要设置你的PHP并开启这个库。如果你是在Windows平台下,那么非常简单,你需要改一改你的php.ini文件的设置,找到php_curl.dll,并取消前面的分号注释就行了。如下所示:
//取消下在的注释
extension=php_curl.dll

如果你是在Linux下面,那么,google排名你需要重新编译你的PHP了,编辑时,你需要打开编译参数——在configure命令上加上“?with-curl” 参数。

一个小示例

如果一切就绪,下面是一个小例程:

<?php 
// 初始化一个 cURL 对象 
$curl = curl_init(); 
// 设置你需要抓取的URL 
curl_setopt($curl, CURLOPT_URL, 'http://3water.com'); 
// 设置header 
curl_setopt($curl, CURLOPT_HEADER, 1); 
// 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
// 运行cURL,请求网页 
$data = curl_exec($curl); 
// 关闭URL请求 
curl_close($curl); 
// 显示获得的数据 
var_dump($data);

如何POST数据

上面是抓取网页的代码,下面则是向某个网页POST数据。假设我们有一个处理表单的网址http://www.example.com/sendSMS.php,其可以接受两个表单域,一个是电话号码,一个是短信内容。

<?php 
$phoneNumber = '13912345678'; 
$message = 'This message was generated by curl and php'; 
$curlPost = 'pNUMBER=' . urlencode($phoneNumber) . '&MESSAGE=' . urlencode($message) . '&SUBMIT=Send'; 
$ch = curl_init();chain link fencing 
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/sendSMS.php'); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); 
$data = curl_exec(); 
curl_close($ch); 
?>

从上面的程序我们可以看到,使用CURLOPT_POST设置HTTP协议的POST方法,而不是GET方法,然后以CURLOPT_POSTFIELDS设置POST的数据。

关于代理服务器

下面是一个如何使用代理服务器的示例。请注意其中高亮的代码,代码很简单,我就不用多说了。

<?php 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com'); 
curl_setopt($ch, CURLOPT_HEADER, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); 
curl_setopt($ch, CURLOPT_PROXY, 'fakeproxy.com:1080'); 
curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password'); 
$data = curl_exec(); 
curl_close($ch); 
?>


关于SSL和Cookie

关于SSL也就是HTTPS协议,煤气发生炉你只需要把CURLOPT_URL连接中的http://变成https://就可以了。当然,还有一个参数叫CURLOPT_SSL_VERIFYHOST可以设置为验证站点。

关于Cookie,你需要了解下面三个参数:

CURLOPT_COOKIE,在当面的会话中设置一个cookie

CURLOPT_COOKIEJAR,当会话结束的时候保存一个Cookie

CURLOPT_COOKIEFILE,Cookie的文件。

HTTP服务器认证

最后,我们来看一看HTTP服务器认证的情况。

<?php 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
curl_setopt(CURLOPT_USERPWD, '[username]:[password]') 
$data = curl_exec(); 
curl_close($ch); 
?>

关于其它更多的内容,请参看相关的cURL手册。
PHP 相关文章推荐
如何在PHP中使用Oracle数据库(2)
Oct 09 PHP
php tp验证表单与自动填充函数代码
Feb 22 PHP
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
Jun 07 PHP
php函数array_merge用法一例(合并同类数组)
Feb 03 PHP
PHP根据传入参数合并多个JS和CSS文件的简单实现
Jun 13 PHP
php生成随机颜色方法汇总
Dec 03 PHP
PHP实现查询手机归属地的方法详解
Apr 28 PHP
自制PHP框架之设计模式
May 07 PHP
Win7环境下Apache连接MySQL提示连接已重置的解决办法
May 09 PHP
php快速导入大量数据的实例方法
Sep 23 PHP
php实现的证件照换底色功能示例【人像抠图/换背景图】
May 29 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
Mar 09 PHP
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
Apr 07 #PHP
The specified CGI application misbehaved by not returning a complete set of HTTP headers
Mar 31 #PHP
PHP stream_context_create()作用和用法分析
Mar 29 #PHP
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
Mar 29 #PHP
PHP 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
Mar 28 #PHP
php中关于普通表单多文件上传的处理方法
Mar 25 #PHP
PHP删除特定数组内容并且重建数组索引的方法.
Mar 25 #PHP
You might like
php下安装配置fckeditor编辑器的方法
2011/03/02 PHP
利用PHP fsockopen 模拟POST/GET传送数据的方法
2015/09/22 PHP
详解PHP用substr函数截取字符串中的某部分
2016/12/03 PHP
javascript 建设银行登陆键盘
2008/06/10 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
Angular Js文件上传之form-data
2015/08/28 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
2016/03/25 Javascript
读Javascript高性能编程重点笔记
2016/12/21 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
vue小白入门教程
2018/04/02 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
vue2 设置router-view默认路径的实例
2018/09/20 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
解决qrcode.js生成二维码时必须定义一个空div的问题
2020/07/09 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
[01:03:31]DOTA2上海特级锦标赛B组资格赛#1 Alliance VS Fnatic第二局
2016/02/26 DOTA
从零学python系列之浅谈pickle模块封装和拆封数据对象的方法
2014/05/23 Python
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
Python数据类型详解(四)字典:dict
2016/05/12 Python
详解Python中使用base64模块来处理base64编码的方法
2016/07/01 Python
OPENCV去除小连通区域,去除孔洞的实例讲解
2018/06/21 Python
Numpy中的mask的使用
2018/07/21 Python
Python3.5 Pandas模块缺失值处理和层次索引实例详解
2019/04/23 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
python处理RSTP视频流过程解析
2020/01/11 Python
python deque模块简单使用代码实例
2020/03/12 Python
副董事长岗位职责
2014/04/02 职场文书
公司合作协议书范本
2014/04/18 职场文书
兽医医药专业求职信
2014/07/27 职场文书
春节慰问信范文
2015/02/15 职场文书
毕业论文致谢词
2015/05/14 职场文书
中学教师教学工作总结
2015/08/13 职场文书
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python