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 相关文章推荐
destoon二次开发常用数据库操作
Jun 21 PHP
CI框架Session.php源码分析
Nov 03 PHP
php结合ACCESS的跨库查询功能
Jun 12 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
Dec 31 PHP
Yii rules常用规则示例
Mar 15 PHP
PHP匿名函数和use子句用法实例
Mar 16 PHP
php+mysql实现的二级联动菜单效果详解
May 10 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Dec 14 PHP
PHP调试及性能分析工具Xdebug详解
Feb 09 PHP
php利用imagemagick实现复古老照片效果实例
Feb 16 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
PHP简单验证码功能机制实例详解
Mar 27 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中call_user_func函数使用注意事项
2014/11/21 PHP
用js怎么把&amp;字符换成&quot;&amp;amp:&quot;
2006/10/19 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
JavaScript使用encodeURI()和decodeURI()获取字符串值的方法
2015/08/04 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
不同js异步函数同步的实现方法
2016/05/28 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
详解React Native顶|底部导航使用小技巧
2017/09/14 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
Python定时执行之Timer用法示例
2015/05/27 Python
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
如何基于python实现画不同品种的樱花树
2020/01/03 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
一款利用html5和css3动画排列人物头像的实例演示
2014/12/05 HTML / CSS
电子狗项圈:eDog Australia
2019/12/04 全球购物
大学生找工作推荐信范文
2013/11/28 职场文书
草船借箭教学反思
2014/02/03 职场文书
三查三看党性分析材料
2014/02/18 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
小摄影师教学反思
2014/04/27 职场文书
音乐幼师求职信
2014/07/09 职场文书
小学领导班子对照材料
2014/08/23 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
社区国庆节活动总结
2015/03/23 职场文书
离婚承诺书格式范文
2015/05/04 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
高中班主任培训心得体会
2016/01/07 职场文书
导游词之凤凰古城
2019/10/22 职场文书
Nginx使用Lua模块实现WAF的原理解析
2021/09/04 Servers
【DOTA2】总决赛血虐~ XTREME GAMING vs MAGMA - OGA DOTA PIT 2022 CN
2022/04/02 DOTA