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 for 循环语句使用方法详细说明
May 09 PHP
基于php权限分配的实现代码
Apr 28 PHP
php cookie使用方法学习笔记分享
Nov 07 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
Nov 20 PHP
完美解决thinkphp验证码出错无法显示的方法
Dec 09 PHP
PHP文件缓存类实现代码
Oct 26 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
Nov 09 PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 PHP
php验证码生成器
May 24 PHP
PHP实现简单的模板引擎功能示例
Sep 02 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
Oct 08 PHP
PHP二维数组分页2种实现方法解析
Jul 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
通过文字传递创建的图形按钮
2006/10/09 PHP
php实现encode64编码类实例
2015/03/24 PHP
Node.js静态文件服务器改进版
2016/01/10 Javascript
jQuery实现点击某个div打开层,点击其他div关闭层实例分析(阻止冒泡)
2016/11/18 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
vue中动态添加class类名的方法
2018/09/05 Javascript
JavaScript对象拷贝与赋值操作实例分析
2018/12/10 Javascript
如何使用Jquery动态生成二级选项列表
2020/02/06 jQuery
vue addRoutes路由动态加载操作
2020/08/04 Javascript
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
python保存数据到本地文件的方法
2018/06/23 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
Flask-WTF表单的使用方法
2019/07/12 Python
django fernet fields字段加密实践详解
2019/08/12 Python
Pytorch Tensor的索引与切片例子
2019/08/18 Python
python模块hashlib(加密服务)知识点讲解
2019/11/25 Python
Python callable内置函数原理解析
2020/03/05 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
CSS3 2D模拟实现摩天轮旋转效果
2016/11/16 HTML / CSS
css3实现冲击波效果的示例代码
2018/01/11 HTML / CSS
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
设置器与访问器的定义以及各自特点
2016/01/08 面试题
医院护理人员的自我评价分享
2013/10/04 职场文书
个人找工作的自我评价
2013/10/17 职场文书
普通简短的个人自我评价
2014/02/15 职场文书
优秀广告词大全
2014/03/19 职场文书
安全技术说明书
2014/05/09 职场文书
党的群众路线教育学习材料
2014/05/12 职场文书
公司离职证明标准范本
2014/10/05 职场文书
群众路线教育实践活动调研报告
2014/11/03 职场文书
高中数学课堂教学反思
2016/02/18 职场文书
Javascript的promise,async和await的区别详解
2022/03/24 Javascript