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 相关文章推荐
最省空间的计数器
Oct 09 PHP
基于PHP遍历数组的方法汇总分析
Jun 08 PHP
php中OR与|| AND与&amp;&amp;的区别总结
Oct 26 PHP
php使用for语句输出三角形的方法
Jun 09 PHP
php+MySql实现登录系统与输出浏览者信息功能
Jul 01 PHP
php模仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(中)
Jun 11 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
Sep 17 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
Jan 20 PHP
php识别翻转iphone拍摄的颠倒图片
May 17 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
实例讲解通过​PHP创建数据库
Jan 20 PHP
thinkphp5 路由分发原理
Mar 18 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
Symfony2获取web目录绝对路径、相对路径、网址的方法
2016/11/14 PHP
纯js实现的论坛常用的运行代码的效果
2008/07/15 Javascript
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
javascript中的107个基础知识收集整理 推荐
2010/03/29 Javascript
js对象的比较
2011/02/26 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
JS异步函数队列功能实例分析
2017/11/28 Javascript
浅谈webpack编译vue项目生成的代码探索
2017/12/11 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
js实现各浏览器全屏代码实例
2018/07/03 Javascript
vuejs点击class变化的实例
2018/09/05 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
vue项目创建步骤及路由router
2020/01/14 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
[04:39]显微镜下的DOTA2第十三期—Pis卡尔个人秀
2014/04/04 DOTA
[39:11]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第二局
2016/02/28 DOTA
python调用机器喇叭发出蜂鸣声(Beep)的方法
2015/03/23 Python
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
python实现简单flappy bird
2018/12/24 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
python pygame实现五子棋小游戏
2020/10/26 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
Python中使用filter过滤列表的一个小技巧分享
2020/05/02 Python
安德玛加拿大官网:Under Armour加拿大
2019/10/02 全球购物
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
公务员培训自我鉴定
2014/02/01 职场文书
大学生学习计划书
2014/09/15 职场文书
个人三严三实对照检查材料思想汇报
2014/09/22 职场文书
2015元旦节寄语
2014/12/08 职场文书
2016中秋节问候语
2015/11/11 职场文书
JavaWeb 入门篇(3)ServletContext 详解 具体应用
2021/07/16 Java/Android
Python面试不修改数组找出重复的数字
2022/05/20 Python