[PHP自动化-进阶]002.CURL模拟登录带有验证码的网站
引言:继前文《模拟登录并采集数据》,大家似乎看不过瘾,这会再出一发,模拟实现带验证码网站的登录。
这篇文章主要介绍了PHP使用CURL实现对带有验证码的网站进行模拟登录的方法,可以帮助读者加深对CURL操作的理解与应用,需要的朋友可以参考下。
网上的很多模拟登录程序,大都是通过服务程序Apache之类的运行,获取到验证码之后显示在网页上,然后填上再POST出去,这样虽然看起来很友好,但是既然模拟登录,登录后所干的事情就不一定是短时间完成的,所以这就要受到php最大执行时间的限制,而且有些操作还有可能权限不足。
本文提供了一个程序实例,思路就是获取到验证码之后把验证码存储为一个图片,然后程序休眠20秒,在20秒之内由用户手动查看图片,并把验证码填写到code.txt文件中,20秒休眠完成后,程序会读code.txt的验证码,这样再带着验证码进行登录操作。
简单,恶心,粗鲁,粗暴……。

切入主题
下面直接上高清代码,:)。
///////////////
// 初始化变量
///////////////
// Cookie文件名称
$cookie_file = "tmp.cookie";
// 验证码文件名称
$vcode_file = "code.txt";
// 登录网址
$login_url = "http://xxx.com/logon.php";
// 验证码网址
$vcode_url = "http://xxx.com/verifyCode.php"; echo "===================================\n";
echo "正在获取COOKIE... \n";
echo "===================================\n";
// 初始化CURL对象
$ch = curl_init(); // 设置请求URL
curl_setopt($ch, CURLOPT_URL, $login_url);
// 设置不输出到浏览器(说明:直接返回字符串,否则直接输出)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 设置连接超时时间(说明:5秒)
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
// 设置Cookie保存文件(说明:把返回来的cookie信息保存在$cookie_file文件中)
curl_setopt($ch,CURLOPT_COOKIEJAR, $cookie_file); // 执行请求
$contents = curl_exec($ch);
// 关闭连接
curl_close($ch); echo "===================================\n";
echo "COOKIE获取完成,正在取验证码... \n";
echo "===================================\n";
// 初始化CURL对象
$ch = curl_init(); // 设置请求URL
curl_setopt($ch, CURLOPT_URL, $vcode_url);
// 设置Cookie使用文件(说明:使用指定路径下的cookie文件,并跟随请求传递)
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
// 设置返回响应头信息[无](说明:该设置通常是需要加上的,用于制作下一次请求的肥料。)
curl_setopt($ch, CURLOPT_HEADER, 0);
// 设置不输出到浏览器(说明:直接返回字符串,否则直接输出)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 执行请求(说明:获得图片字符集)
$img = curl_exec($ch);
// 关闭连接
curl_close($ch); echo "===================================\n";
echo "正在保存验证码图片... \n";
echo "===================================\n";
$fp = fopen("verifyCode.jpg", "w");
fwrite($fp, $img);
fclose($fp); echo "===================================\n";
echo "验证码取出完成,正在休眠... \n";
echo "20秒内请把验证码填入code.txt并保存.\n";
echo "===================================\n";
// 线程睡眠20秒
sleep(20); echo "===================================\n";
echo "休眠完成,开始取验证码... \n";
echo "===================================\n";
$code = file_get_contents(vcode_file);
echo "验证码成功取出:$code\n"; echo "===================================\n";
echo "正在准备模拟登录... \n";
echo "正在准备模拟登录... \n";
echo "===================================\n";
// 初始化CURL对象
$ch = curl_init(); // 设置请求URL
curl_setopt($ch, CURLOPT_URL, $url);
// 设置返回响应头信息[无](说明:该设置通常是需要加上的,用于制作下一次请求的肥料。)
curl_setopt($ch, CURLOPT_HEADER, false);
// 设置不输出到浏览器(说明:直接返回字符串,否则直接输出)
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 设置请求携带数据
curl_setopt($ch, CURLOPT_POSTFIELDS, "username=superdo&pwd=do.org.cn&verifycode=$code");
// 设置Cookie使用文件(说明:使用指定路径下的cookie文件,并跟随请求传递)
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); // 执行请求
$result = curl_exec($ch);
// 关闭连接
curl_close($ch); // 这一块根据自己抓包获取到的网站上的数据来做判断
if (substr_count($result, "登录成功")) {
echo "登录成功\n";
} else {
echo "登录失败\n";
exit;
} // OK,开始做你想做的事吧。。。。。
未完待续……。

本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士)
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4791957.html
[PHP自动化-进阶]002.CURL模拟登录带有验证码的网站的更多相关文章
- php使用curl模拟登录带验证码的网站[开发篇]
需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下! <?php namespace Home\ ...
- php使用curl模拟登录带验证码的网站
需求是这样的,需要登录带验证码的网站,获取数据,但是不可能人为一直去记录数据,想通过自动采集的方式进行,如下是试验出来的结果代码!有需要的可以参考下! <?php namespace Home\ ...
- C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站
原文:C# 利用 HttpWebRequest 和 HttpWebResponse 模拟登录有验证码的网站 我们经常会碰到需要程序模拟登录一个网站,那如果网站需要填写验证码的要怎样模拟登录呢?这篇文章 ...
- [PHP自动化-进阶]001.CURL模拟登录并采集数据
引言:PHP可以通过libcurl实现模拟登录,提交数据,违法乱纪,烧杀抢虐等等事项. 简单说明一下"libcurl",补一下脑: libcurl目前支持http.https.ft ...
- PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
网上的很多模拟登录程序,大都是通过服务程序apache之类的运行,获取到验证码之后显示在网页上,然后填上再POST出去,这样虽然看起来很友 好,但是既然模拟登录,登录后所干的事情就不一定是短时间完成的 ...
- php curl模拟登录(半转载)
参考:http://our2848884.blog.163.com/blog/static/146854834201282039334/ php curl模拟登录 参考:http://blog.c ...
- php_curl模拟登录有验证码实例
<?php/** * @author 追逐__something * @version $id */define('SCRIPT_ROOT',dirname(__FILE__).'/');$ac ...
- (转)php_curl模拟登录有验证码实例
三年来的第一篇博客,还记得那是一个夜深人静的夜晚, 独自一人坐在不到10平米的小屋里,指头迅速的敲打着键盘,这天真TMD热.BJ生活啊. 唉! 最近一直在参加一个论坛批量发帖的项目开发. 模拟登录,模 ...
- Java模拟登录带验证码的教务系统(原理详解)
一:原理 客户端访问服务器,服务器通过Session对象记录会话,服务器可以指定一个唯一的session ID作为cookie来代表每个客户端,用来识别这个客户端接下来的请求. 我们通过Chrome浏 ...
随机推荐
- CodeForces - 224C. Bracket Sequence (栈模拟)简单做法
A bracket sequence is a string, containing only characters "(", ")", "[&quo ...
- Spring源码阅读 之 配置的读取,解析
在上文中我们已经知道了Spring如何从我们给定的位置加载到配置文件,并将文件包装成一个Resource对象.这篇文章我们将要探讨的就是,如何从这个Resouce对象中加载到我们的容器?加载到容器后又 ...
- leetcode_雇佣 K 名工人的最低成本(优先级队列,堆排序)
题干: 有 N 名工人. 第 i 名工人的工作质量为 quality[i] ,其最低期望工资为 wage[i] . 现在我们想雇佣 K 名工人组成一个工资组.在雇佣 一组 K 名工人时,我们必须按照下 ...
- Boosting算法总结(ada boosting、GBDT、XGBoost)
把之前学习xgb过程中查找的资料整理分享出来,方便有需要的朋友查看,求大家点赞支持,哈哈哈 作者:tangg, qq:577305810 一.Boosting算法 boosting算法有许多种具体算法 ...
- STM32 IAP 升级官方资料汇总
整理了一下SMT32标准外设库进行IAP升级的官方demo: 标准库版本 STM32F10xxx in-application programming using the USART (AN2557) ...
- python语法学习第一天--变量、运算符、数据类型
变量:计算机中的一块内存,给变量赋值意味着将值存入内存中 python中变量不用类型声明(根据赋的值决定类型),但使用时(创建时)必须赋值(=赋值). 多个变量的赋值: ①a=b=c=1; ②a,b, ...
- C# 获取从1月至12月的月初时间和月末时间
public IActionResult GetMonthData() { var dataList = new List<object>(); var currentMonth = Da ...
- Codeforces 1272E (Nearest Opposite Parity,反向建边)
题意:给你n个数,每个数的值为a[i],每个点可以从i这号点跳转至(i - a[i]) 或 (i + a[i])点,点的范围为[1,n],然后问的是从偶数点跳至奇数点,从奇数点跳至偶数点的最少次数是多 ...
- jquery 扫码实现入库登记管理
刚才跟一位分享的大神讲了关于项目中的需求,因为是第一次做这样的需求,还是蒙蒙的,现在把设计图给大家看看,大家有没有做过这样的需求业务,请多多指教!
- 5、打断点(bpu)
前言 先给大家讲一则小故事,在我们很小的时候是没有手机的,那时候跟女神聊天都靠小纸条.某屌丝A男对隔壁小王的隔壁女神C倾慕已久,于是天天小纸条骚扰,无奈中间隔着一个小王,这样小王就负责传小纸条了.有一 ...