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 进度条实现代码
Mar 10 PHP
一步一步学习PHP(6) 面向对象
Feb 16 PHP
PHP定时执行计划任务的多种方法小结
Dec 19 PHP
php打造属于自己的MVC框架
Mar 07 PHP
php中http_build_query 的一个问题
Mar 25 PHP
php编写的简单页面跳转功能实现代码
Nov 27 PHP
PHP 实现的将图片转换为TXT
Oct 21 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 PHP
使用ltrace工具跟踪PHP库函数调用的方法
Apr 25 PHP
PHP 验证身份证是否合法的函数
Feb 09 PHP
php+Ajax处理xml与json格式数据的方法示例
Mar 04 PHP
解决Laravel5.5下的toArray问题
Oct 15 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
PHP去除数组中重复的元素并按键名排序函数
2008/08/18 PHP
php绝对路径与相对路径之间关系的的分析
2010/03/03 PHP
php中的注释、变量、数组、常量、函数应用介绍
2012/11/16 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
深入php内核之php in array
2015/11/10 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
PHP扩展mcrypt实现的AES加密功能示例
2019/01/29 PHP
jquery1.4后 jqDrag 拖动 不可用
2010/02/06 Javascript
CodeMirror2 IE7/IE8 下面未知运行时错误的解决方法
2012/03/29 Javascript
Javascript核心读书有感之语句
2015/02/11 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
2015/04/12 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
JS实现的车标图片提示效果代码
2015/10/10 Javascript
JavaScript的模块化开发框架Sea.js上手指南
2016/05/12 Javascript
JavaScript制作弹出层效果
2016/12/02 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
python判断windows隐藏文件的方法
2014/03/21 Python
Python遍历numpy数组的实例
2018/04/04 Python
Python3.5运算符操作实例详解
2019/04/25 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
python装饰器相当于函数的调用方式
2019/12/27 Python
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
小学教师的个人自我鉴定
2013/10/26 职场文书
我未来的职业规划范文
2014/01/11 职场文书
将相和教学反思
2014/02/04 职场文书
绿色出行口号
2014/06/18 职场文书
防灾减灾活动总结
2014/08/30 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
平安家庭事迹材料
2014/12/20 职场文书
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server