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 相关文章推荐
无限级别菜单的实现
Oct 09 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
Jul 03 PHP
PHP中使用crypt()实现用户身份验证的代码
Sep 05 PHP
PHP中spl_autoload_register函数的用法总结
Nov 07 PHP
Windows下编译PHP5.4和xdebug全记录
Apr 03 PHP
php实现随机显示图片方法汇总
May 21 PHP
PHP使用file_get_content设置头信息的方法
Feb 14 PHP
微信支付的开发流程详解
Sep 13 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
Nov 13 PHP
PHP如何搭建百度Ueditor富文本编辑器
Sep 21 PHP
laravel-admin自动生成模块,及相关基础配置方法
Oct 08 PHP
windows系统php环境安装swoole具体步骤
Mar 04 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
40个迹象表明你还是PHP菜鸟
2008/09/29 PHP
php使用base64加密解密图片示例分享
2014/01/20 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
php中curl使用指南
2015/02/05 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
简单的前端js+ajax 购物车框架(入门篇)
2011/10/29 Javascript
轻松创建nodejs服务器(7):阻塞操作的实现
2014/12/18 NodeJs
jQuery scrollFix滚动定位插件
2015/04/01 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
jQuery Easyui DataGrid点击某个单元格即进入编辑状态焦点移开后保存数据
2016/08/15 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
微信小程序页面传值实例分析
2017/04/19 Javascript
JS设计模式之单例模式(一)
2017/09/29 Javascript
js正则取值的结果数组调试方法
2018/10/10 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
详解vue在项目中使用百度地图
2019/03/26 Javascript
深入了解JavaScript代码覆盖
2019/06/13 Javascript
微信小程序防止多次点击跳转(函数节流)
2019/09/19 Javascript
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
在Python的Django框架中simple-todo工具的简单使用
2015/05/30 Python
使用Python写CUDA程序的方法
2017/03/27 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
狗狗玩具、零食和咀嚼物的月度送货服务:Super Chewer
2018/08/22 全球购物
澳大利亚在线消费电子产品商店:TobyDeals
2020/01/05 全球购物
explicit和implicit的含义
2012/11/15 面试题
MIS软件工程师的面试题
2016/04/22 面试题
学校门卫工作职责
2013/12/07 职场文书
单位实习证明怎么写
2014/01/17 职场文书
学生党员的自我评价范文
2014/03/01 职场文书
职业女性的职业规划
2014/03/04 职场文书
投标诚信承诺书
2014/05/26 职场文书
冰峪沟导游词
2015/02/09 职场文书
分享提高 Python 代码的可读性的技巧
2022/03/03 Python