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生成自己的LOG文件
Oct 09 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
Jun 22 PHP
从零开始学YII2框架(一)通过Composer安装Yii2框架
Aug 20 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 PHP
php将html转成wml的WAP标记语言实例
Jul 08 PHP
PHP模拟post提交数据方法汇总
Feb 16 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
Oct 14 PHP
php中__toString()方法用法示例
Dec 07 PHP
详解php语言最牛掰的Laravel框架
Nov 20 PHP
php往mysql中批量插入数据实例教程
Dec 12 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 05 PHP
laravel 实现设置时区的简单方法
Oct 10 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使用逆波兰式计算工资的方法
2015/07/29 PHP
JS多物体 任意值 链式 缓冲运动
2012/08/10 Javascript
nodejs教程之异步I/O
2014/11/21 NodeJs
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
jQuery自定义动画函数实例详解(附demo源码)
2015/12/10 Javascript
Node.js 条形码识别程序构建思路详解
2016/02/14 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
bootstrap datetimepicker日期插件使用方法
2017/01/13 Javascript
Bootstrap导航条学习使用(二)
2017/02/08 Javascript
Vue组件库发布到npm详解
2018/02/17 Javascript
vue实现全屏滚动效果(非fullpage.js)
2020/03/07 Javascript
Python列表删除的三种方法代码分享
2017/10/31 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
用python简单实现mysql数据同步到ElasticSearch的教程
2018/05/30 Python
python实现音乐下载的统计
2018/06/20 Python
Python切片操作深入详解
2018/07/27 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
python flask安装和命令详解
2019/04/02 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
python中如何使用insert函数
2020/01/09 Python
python add_argument()用法解析
2020/01/29 Python
python topk()函数求最大和最小值实例
2020/04/02 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
Python decimal模块使用方法详解
2020/06/08 Python
Python通过len函数返回对象长度
2020/10/22 Python
基于HTML5 Canvas 实现商场监控实例详解
2017/11/20 HTML / CSS
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
哪些情况下不应该使用索引
2015/07/20 面试题
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
销售开票员岗位职责
2015/04/15 职场文书
Python基础知识之变量的详解
2021/04/14 Python
Python数据类型最全知识总结
2021/05/31 Python