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 相关文章推荐
六酷社区论坛HOME页清新格调免费版 下载
Mar 07 PHP
删除及到期域名的查看(抢域名必备哦)
May 14 PHP
php通过strpos查找字符串出现位置的方法
Mar 17 PHP
php+ajax 实现输入读取数据库显示匹配信息
Oct 08 PHP
深入理解PHP内核(一)
Nov 10 PHP
php实现图片上传时添加文字和图片水印技巧
Apr 18 PHP
php中时间函数date及常用的时间计算
May 12 PHP
Yii框架参数化查询中IN查询只能查询一个的解决方法
May 20 PHP
PHP删除字符串中非字母数字字符方法总结
Jan 20 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 PHP
php 防护xss,PHP的防御XSS注入的终极解决方案
Apr 01 PHP
laravel添加角色和模糊搜索功能的实现代码
Jun 22 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
PHP基于工厂模式实现的计算器实例
2015/07/16 PHP
基于JavaScript 类的使用详解
2013/05/07 Javascript
JS实现OCX控件的事件响应示例
2014/09/17 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
JavaScript之Vue.js【入门基础】
2016/12/06 Javascript
javascript设计模式之模块模式学习笔记
2017/02/15 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
Bootstrap 树控件使用经验分享(图文解说)
2017/11/06 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
Vue不能检测到Object/Array更新的情况的解决
2018/06/26 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
JavaScript实现的前端AES加密解密功能【基于CryptoJS】
2018/08/28 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
用Python实现命令行闹钟脚本实例
2016/09/05 Python
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
python如何使用正则表达式的前向、后向搜索及前向搜索否定模式详解
2017/11/08 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
Django中的静态文件管理过程解析
2019/08/01 Python
使用pandas的box_plot去除异常值
2019/12/10 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
tensorflow实现将ckpt转pb文件的方法
2020/04/22 Python
keras中的backend.clip用法
2020/05/22 Python
AVI-8手表美国官方商店:AVI-8 USA
2019/04/10 全球购物
blueseventy官网:铁人三项和比赛泳衣
2021/02/06 全球购物
strstr()的简单实现
2013/09/26 面试题
创意活动策划书
2014/01/15 职场文书
助人为乐模范事迹材料
2014/06/02 职场文书
老龄工作先进事迹
2014/08/15 职场文书
中学生检讨书范文
2014/11/03 职场文书
小学英语教学反思范文
2016/02/15 职场文书