[PHP自动化-进阶]001.CURL模拟登录并采集数据
引言:PHP可以通过libcurl实现模拟登录,提交数据,违法乱纪,烧杀抢虐等等事项。
简单说明一下"libcurl",补一下脑:
- libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。
- libcurl同时也支持 HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。
使用curl可以实现Get和Post请求的方法,伪造来路IP等等功能。。。

切入主题
这一讲,我们为大家准备了如何利用libcurl进行"模拟登录用户并采集数据"。
开启说明
默认情况下,PHP的CURL功能是没有开启的,所以你要自己去开启这个功能,需要如下操作:
在php.ini中把 ;extension= php_curl.dll 前面的 " ; " 号去掉!!!
单刀直入
直接上代码,代码注释已经很详细!各位看官请看下面:
步骤1:
创建一个具有唯一文件名的临时文件,用于cookie信息的存储。 (若成功,则返回新的临时文件名。若失败,则返回 false。)
// 指定Cookie保存文件
$cookie_file = tempnam('./temp', 'cookie');
步骤2:
初始化一个curl对象,并同时指定要请求的网址,请求携带数据。
// 请求网址
$url = "http://www.phpyu.com/index.php?action=login";
// 请求网址
$data = "user=××&pw=××";;
// 初始化CURL对象
$ch = curl_init($url);
步骤3:
设置curl对象参数。
// 设置返回响应头信息[无](说明:该设置通常是需要加上的,用于制作下一次请求的肥料。)
curl_setopt($ch, CURLOPT_HEADER, 0);
// 设置不输出到浏览器(说明:直接返回字符串,否则直接输出)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 设置请求为通用POST(说明:如果想PHP去做一个正规的HTTP POST,设置属性为一个非零值。这个POST是普通的 application/x-www-from-urlencoded 类型,多数被HTML表单使用。)
curl_setopt($ch, CURLOPT_POST, 1);
// 设置请求携带数据
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
// 设置Cookie保存文件(说明:把返回来的cookie信息保存在$cookie_file文件中)
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
// 设置自动解析编码(说明:如果出现乱码问题则加上此句)
curl_setopt($ch, CURLOPT_ENCODING, '');
步骤4:
执行请求,并关闭。
// 执行请求
curl_exec($ch);
// 关闭连接
curl_close($ch);
上面已经完成了模拟登录的过程。
偷龙转凤
在模拟实现登录之后,下面要做的就是进入实际要操作的页面(记得你现在已经登录了,你应该把登录的凭证cookie保存了起来。)
// 请求网址
$url="http://www.phpyu.com/admin/××";
// 初始化CURL对象
$ch = curl_init($url);
// 设置请求头[无](说明:如果需要把头包含在输出中,则设置属性为一个非零值。)
curl_setopt($ch, CURLOPT_HEADER, 0);
// 设置直接输出到浏览器(说明:0:表示直接输出 1:返回字符串)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
// 设置上传Cookie内容(说明:该内容引用某个文件)
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
// 执行请求
curl_exec($ch);
// 关闭连接
curl_exec($ch);
综合示例1则
Mark一下,大家有兴趣可以看看。
<?php // 常量[Cookie保存路径]
define("COOKIE_PATH", './'); // 请求网址
$url = 'http://****.com/login';
// 请求方式
$method_post = true; // 初始化CURL对象
$ch = curl_init();
// 设置网址
$params[CURLOPT_URL] = $url;
// 设置返回响应头信息[有]
$params[CURLOPT_HEADER] = true;
// 设置不输出到浏览器(说明:直接返回字符串,否则直接输出)
$params[CURLOPT_RETURNTRANSFER] = true;
// 设置允许重定向
$params[CURLOPT_FOLLOWLOCATION] = true;
// 设置浏览器引擎
$params[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 5.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1';
// 设置请求方式
$params[CURLOPT_POST] = true;
// 设置请求数据
$vars['username'] = '张三';
$vars['password'] = '123';
$data = '';
foreach ($vars as $key => $value) {
$data.= urlencode($key) . '=' . urlencode($value) . '&';
}
$params[CURLOPT_POSTFIELDS] = $data; // 设置Cookie
// 判断是否有cookie,有的话直接使用
if (isset($_COOKIE['cookie_jar']) && ($_COOKIE['cookie_jar'] || is_file($_COOKIE['cookie_jar']))) {
$params[CURLOPT_COOKIEFILE] = $_COOKIE['cookie_jar'];
} else {
// 产生一个cookie文件
$cookie_jar = tempnam(COOKIE_PATH, 'cookie');
// 写入cookie信息
$params[CURLOPT_COOKIEJAR] = $cookie_jar;
// 保存cookie路径
setcookie('cookie_jar', $cookie_jar);
} // 设置curl参数集
curl_setopt_array($ch, $params);
// 执行请求
$html = curl_exec($ch);
// 输出结果
echo $html;
// 关闭连接
curl_close($ch); ?>
注: 如果遇到无法请求https站点的情况,可能是因为无法验证证书或者域名,只要加下下列两句话即可。
// 跳过证书检查
$params[CURLOPT_SSL_VERIFYPEER] = false;
// 从证书中检查SSL加密算法是否存在
$params[CURLOPT_SSL_VERIFYHOST] = false;
未完待续……。

本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士)
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4790910.html
[PHP自动化-进阶]001.CURL模拟登录并采集数据的更多相关文章
- [PHP自动化-进阶]002.CURL模拟登录带有验证码的网站
引言:继前文<模拟登录并采集数据>,大家似乎看不过瘾,这会再出一发,模拟实现带验证码网站的登录. 这篇文章主要介绍了PHP使用CURL实现对带有验证码的网站进行模拟登录的方法,可以帮助读者 ...
- php中CURL实现模拟登录并采集数据
在php中采集我们用的是简单的采集方式(例如file_get_contents)就无法做到了,但是如果想模拟登录用户并采集利用它就没办法了,我们可利用CURL函数来实现模拟登录并采集数据 这里要说一些 ...
- PHP中使用CURL模拟登录并获取数据实例
cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信 ...
- PHP cURL应用实现模拟登录与采集使用方法详解
对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程链接的数据,但是它的可控制性太差了,对于各种复杂情况的采集情景,file_get_co ...
- PHP cURL实现模拟登录与采集使用方法详解教程
来源:http://www.zjmainstay.cn/php-curl 本文将通过案例,整合浏览器工具与PHP程序,教你如何让数据 唾手可得 . 对于做过数据采集的人来说,cURL一定不会陌生.虽然 ...
- php curl模拟登录(半转载)
参考:http://our2848884.blog.163.com/blog/static/146854834201282039334/ php curl模拟登录 参考:http://blog.c ...
- php curl模拟post请求提交数据样例总结
在php中要模拟post请求数据提交我们会使用到curl函数,以下我来给大家举几个curl模拟post请求提交数据样例有须要的朋友可參考參考.注意:curl函数在php中默认是不被支持的,假设须要使用 ...
- php curl模拟post请求提交数据例子总结
php curl模拟post请求提交数据例子总结 [导读] 在php中要模拟post请求数据提交我们会使用到curl函数,下面我来给大家举几个curl模拟post请求提交数据例子有需要的朋友可参考参考 ...
- php cUrl模拟登录,cookie保存到文件中
源码如下: <?php header("Content-Type:text/html;charset=utf-8"); //模拟群友通讯录手机号登录 $curl = curl ...
随机推荐
- python进程/线程/协程
一 背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所 ...
- P1640 连续攻击游戏
题目传送门 Ⅰ.二分图匹配 其实这题应该不难看出是二分图匹配(尽管我没看出来) 每个物品只能用一次,实际上就是1~n的数字对物品的最大匹配 把物品的两个属性向物品编号连边,之后就从数字1一直匹配过去 ...
- [蓝桥杯2018初赛]小朋友崇拜圈(dfs找环)
传送门 思路: 题意大意:n条有向边,找出最大环. 我们发现,如果一个小朋友没有被任何人崇拜,那么他一定不位于环中.为此我们可以设置一个indug数组预处理.如果2被崇拜了那么indug[2]就加加, ...
- 2249: Altruistic Amphibians 01背包
Description A set of frogs have accidentally fallen to the bottom of a large pit. Their only means o ...
- STM32 Cube之旅-尝试新的开发方式
尝试使用Cube进行一些开发学习,这里对此做一个梗概,先有一个全面的了解. 文章目录 Cube全家桶 CubeMX CubeIDE CubeProg 结语 Cube全家桶 曾几何时,ST刚推出Cube ...
- CTR学习笔记&代码实现5-深度ctr模型 DeepCrossing -> DCN
之前总结了PNN,NFM,AFM这类两两向量乘积的方式,这一节我们换新的思路来看特征交互.DeepCrossing是最早在CTR模型中使用ResNet的前辈,DCN在ResNet上进一步创新,为高阶特 ...
- android 数据库是否该关闭
关于android多线程数据读写请看博客: android 多线程数据库读写 常常纠结于获取了SQLiteDatabase每次操作完是否要关闭的问题,每次关闭又怕影响性能,这里记录下SQLiteOpe ...
- c++离散化处理大范围和重复数据
关于离散化 有些新手可能会问:离散化是什么?离散化就是将无限空间中有限的个体映射到有限的空间里去. 上面的定义肯定会有人看不懂(其实我刚开始学的时候也看不懂) 用我自己的话来说,就是在不改变数据的相对 ...
- 黑马程序员_毕向东_Java基础视频教程——三元运算符(随笔)
三元运算符:三个元素参与运算的符号 [三元运算符:简略版的 if(){} else() {}语句] class Text { public static void main(String[] args ...
- 真香警告!扩展 swagger支持文档自动列举所有枚举值
承接上篇文章 <一站式解决使用枚举的各种痛点> 文章最后提到:在使用 swagger 来编写接口文档时,需要告诉前端枚举类型有哪些取值,每次增加取值之后,不仅要改代码,还要找到对应的取值在 ...