PHP的cURL库简介及使用示例


Posted in PHP onFebruary 06, 2015

使用PHP的cURL库可以简单和有效地去抓网页。你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据了。无论是你想从从一个链接上取部分数据,或是取一个XML文件并把其导入数据库,那怕就是简单的获取网页内容,cURL 是一个功能强大的PHP库。

PHP中的CURL函数库(Client URL Library Function)

curl_close — 关闭一个curl会话

curl_copy_handle — 拷贝一个curl连接资源的所有内容和参数

curl_errno — 返回一个包含当前会话错误信息的数字编号

curl_error — 返回一个包含当前会话错误信息的字符串

curl_exec — 执行一个curl会话

curl_getinfo — 获取一个curl连接资源句柄的信息

curl_init — 初始化一个curl会话

curl_multi_add_handle — 向curl批处理会话中添加单独的curl句柄资源

curl_multi_close — 关闭一个批处理句柄资源

curl_multi_exec — 解析一个curl批处理句柄

curl_multi_getcontent — 返回获取的输出的文本流

curl_multi_info_read — 获取当前解析的curl的相关传输信息

curl_multi_init — 初始化一个curl批处理句柄资源

curl_multi_remove_handle — 移除curl批处理句柄资源中的某个句柄资源

curl_multi_select — Get all the sockets associated with the cURL extension, which can then be "selected"

curl_setopt_array — 以数组的形式为一个curl设置会话参数

curl_setopt — 为一个curl设置会话参数

curl_version — 获取curl相关的版本信息

curl_init()函数的作用初始化一个curl会话,curl_init()函数唯一的一个参数是可选的,表示一个url地址。

curl_exec()函数的作用是执行一个curl会话,唯一的参数是curl_init()函数返回的句柄。

curl_close()函数的作用是关闭一个curl会话,唯一的参数是curl_init()函数返回的句柄。

例子一: 基本例子

??php

// 初始化一个 cURL 对象

$curl = curl_init();

// 设置你需要抓取的URL

curl_setopt($curl, CURLOPT_URL, 'http://www.cmx8.cn');

// 设置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数据

sendSMS.php,其可以接受两个表单域,一个是电话号码,一个是短信内容。

??php

$phoneNumber = '13812345678';

$message = 'This message was generated by curl and php';

$curlPost = 'pNUMBER=' . urlencode($phoneNumber) . '&MESSAGE=' . urlencode($message) . '&SUBMIT=Send';

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://www.lxvoip.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);

??

例子三:使用代理服务器

??php 

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, 'http://www.cmx8.cn');

curl_setopt($ch, CURLOPT_HEADER, 1);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);

curl_setopt($ch, CURLOPT_PROXY, 'proxy.lxvoip.com:1080');

curl_setopt($ch, CURLOPT_PROXYUSERPWD, 'user:password');

$data = curl_exec();

curl_close($ch);

??

例子四: 模拟登录

Curl 模拟登录 discuz 程序,适合DZ7.0,将username改成你的用户名,userpass改成你的密码就可以了.

<?php    

/**   

* Curl 模拟登录 discuz 程序   

* 尚未实现开启验证码的的论坛登录功能   

*/   

!extension_loaded('curl') && die('The curl extension is not loaded.');    

$discuz_url = 'http://www.lxvoip.com';//论坛地址    

$login_url = $discuz_url .'/logging.php?action=login';//登录页地址    

$get_url = $discuz_url .'/my.php?item=threads'; //我的帖子    

$post_fields = array();    

//以下两项不需要修改    

$post_fields['loginfield'] = 'username';    

$post_fields['loginsubmit'] = 'true';    

//用户名和密码,必须填写    

$post_fields['username'] = 'lxvoip';    

$post_fields['password'] = '88888888';    

//安全提问    

$post_fields['questionid'] = 0;    

$post_fields['answer'] = '';    
//@todo验证码    

$post_fields['seccodeverify'] = '';    

//获取表单FORMHASH    

$ch = curl_init($login_url);    

curl_setopt($ch, CURLOPT_HEADER, 0);    

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    

$contents = curl_exec($ch);    

curl_close($ch);    

preg_match('/<input\s*type="hidden"\s*name="formhash"\s*value="(.*?)"\s*\/>/i', $contents, $matches);    

if(!empty($matches)) {    

    $formhash = $matches[1];    

} else {    

    die('Not found the forumhash.');    

}    

//POST数据,获取COOKIE    

$cookie_file = dirname(__FILE__) . '/cookie.txt';    

//$cookie_file = tempnam('/tmp');    

$ch = curl_init($login_url);    

curl_setopt($ch, CURLOPT_HEADER, 0);    

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    

curl_setopt($ch, CURLOPT_POST, 1);    

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);    

curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);    

curl_exec($ch);    

curl_close($ch);    

//带着上面得到的COOKIE获取需要登录后才能查看的页面内容    

$ch = curl_init($get_url);    

curl_setopt($ch, CURLOPT_HEADER, 0);    

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);    

curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);    

$contents = curl_exec($ch);    

curl_close($ch);    

var_dump($contents);    

?>

以上就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
PHP 导出数据到淘宝助手CSV的方法分享
Feb 27 PHP
PHP访问MYSQL数据库封装类(附函数说明)
Dec 04 PHP
php学习笔记之 函数声明(二)
Jun 09 PHP
PHP调用Webservice实例代码
Jul 29 PHP
简单实用的.net DataTable导出Execl
Oct 28 PHP
PHP静态文件生成类实例
Nov 29 PHP
php安装swoole扩展的方法
Mar 19 PHP
php使用curl详细解析及问题汇总
Aug 11 PHP
php compact 通过变量创建数组
Nov 15 PHP
Laravel中前端js上传图片到七牛云的示例代码
Sep 04 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
Apr 04 PHP
PHP中define() 与 const定义常量的区别详解
Jun 25 PHP
PHP实用函数分享之去除多余的0
Feb 06 #PHP
php定时执行任务设置详解
Feb 06 #PHP
PHP四舍五入、取整、round函数使用示例
Feb 06 #PHP
WordPress中is_singular()函数简介
Feb 05 #PHP
php简单实现MVC
Feb 05 #PHP
php中curl使用指南
Feb 05 #PHP
PHP开发注意事项总结
Feb 04 #PHP
You might like
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
PHP使用xmllint命令处理xml与html的方法
2014/12/15 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
php微信开发之带参数二维码的使用
2016/08/03 PHP
js图片实时加载提供网页打开速度
2014/09/11 Javascript
bootstrap提示标签、提示框实现代码
2016/12/28 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
解决vue-router中的query动态传参问题
2018/03/20 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
Nuxt的路由动画效果案例
2020/11/06 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
python3音乐播放器简单实现代码
2020/04/20 Python
Python排序算法实例代码
2017/08/10 Python
Python实现屏幕截图的两种方式
2018/02/05 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
python实现录音小程序
2020/10/26 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
Python解析微信dat文件的方法
2020/11/30 Python
python 使用openpyxl读取excel数据
2021/02/18 Python
CSS实现的一闪而过的图片闪光效果
2014/04/23 HTML / CSS
HTML5 WebGL 实现民航客机飞行监控系统
2019/07/25 HTML / CSS
德国苹果商店:MacTrade
2020/05/18 全球购物
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
开办饭店创业计划书
2013/12/28 职场文书
学校宣传标语
2014/06/18 职场文书
机关作风建设工作总结
2014/10/23 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
Django drf请求模块源码解析
2021/06/08 Python
Golang实现可重入锁的示例代码
2022/05/25 Golang