PHP使用CURL实现对带有验证码的网站进行模拟登录的方法

 更新时间:2014年07月23日 10:52:32   投稿:shichen2014   我要评论
这篇文章主要介绍了PHP使用CURL实现对带有验证码的网站进行模拟登录的方法,可以帮助读者加深对CURL操作的理解与应用,需要的朋友可以参考下

网上的很多模拟登录程序,大都是通过服务程序apache之类的运行,获取到验证码之后显示在网页上,然后填上再POST出去,这样虽然看起来很友好,但是既然模拟登录,登录后所干的事情就不一定是短时间完成的,所以这就要受到php最大执行时间的限制,而且有些操作还有可能权限不足。

本文提供了一个程序实例,思路就是获取到验证码之后把验证码存储为一个图片,然后程序休眠20秒,在20秒之后由用户手动查看图片,并把验证码填写到code.txt文件中,20秒休眠完成后,程序会读code.txt的验证码,这样再带着验证码进行登录操作。具体代码如下:

/**
 * 模拟登录
 */
//初始化变量
$cookie_file = "tmp.cookie";
$login_url = "http://xxx.com/logon.php";
$verify_code_url ="";
echo "正在获取COOKIE...\n";
$curlj = curl_init();
$timeout = 5;
curl_setopt($curl, CURLOPT_URL, $login_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($curl,CURLOPT_COOKIEJAR,$cookie_file); //获取COOKIE并存储
$contents = curl_exec($curl);
curl_close($curl);
echo "COOKIE获取完成,正在取验证码...\n";
//取出验证码
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $verify_code_url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$img = curl_exec($curl);
curl_close($curl);
$fp = fopen("verifyCode.jpg","w");
fwrite($fp,$img);
fclose($fp);
echo "验证码取出完成,正在休眠,20秒内请把验证码填入code.txt并保存\n";
//停止运行20秒
sleep(20);
echo "休眠完成,开始取验证码...\n";
$code = file_get_contents("code.txt");
echo "验证码成功取出:$code\n";
echo "正在准备模拟登录...\n";
$post ="";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file);
$result=curl_exec($curl);
curl_close($curl);
//这一块根据自己抓包获取到的网站上的数据来做判断
if(substr_count($result,"登录成功")){
 echo "登录成功\n";
}else{
 echo "登录失败\n";
 exit;
}
//OK,开始做你想做的事吧。。。。。

相关文章

  • 由php中字符offset特征造成的绕过漏洞详解

    由php中字符offset特征造成的绕过漏洞详解

    这篇文章主要给大家介绍了关于由php中字符offset特征造成的绕过漏洞的相关资料,文中不仅详细介绍了该漏洞的形成,更重要的是介绍了修复方式,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • PHP实现获取客户端IP并获取IP信息

    PHP实现获取客户端IP并获取IP信息

    这篇文章主要介绍了PHP实现获取客户端IP并获取IP信息的方法示例,非常实用,有需要的小伙伴快来参考下吧。
    2015-03-03
  • PHP面向对象程序设计继承用法简单示例

    PHP面向对象程序设计继承用法简单示例

    这篇文章主要介绍了PHP面向对象程序设计继承用法,结合具体实例形式分析了php面向对象程序设计中继承的相关概念、原理、使用技巧与相关操作注意事项,需要的朋友可以参考下
    2018-12-12
  • php,ajax实现分页

    php,ajax实现分页

    之前用php写好了个分页程序,今天试着结合ajax实现这个功能,成功了。哈哈,代码不难写,但写好之后测试发现出了,然后又调试了好段时间才正确。深感开发人员的时间大部分都是花在调试代码上的。
    2008-03-03
  • 使用纯php代码实现页面伪静态的方法

    使用纯php代码实现页面伪静态的方法

    这篇文章主要介绍了使用纯php代码实现页面伪静态的方法,涉及php服务器预定义变量及正则匹配的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • php数组函数序列 之array_count_values() 数组中所有值出现的次数函数

    php数组函数序列 之array_count_values() 数组中所有值出现的

    array_count_values() 函数用于数组中所有值出现的次数,本函数返回一个数组,其元素的键名是原数组的值,键值是该值在原数组中出现的次数。
    2011-10-10
  • php文件上传的两种实现方法

    php文件上传的两种实现方法

    这篇文章主要为大家详细介绍了两种php文件上传的实现方法,感兴趣的朋友可以参考一下
    2016-04-04
  • 通过php删除xml文档内容的方法

    通过php删除xml文档内容的方法

    这篇文章主要介绍了通过php删除xml文档内容的方法,实例分析了两种删除XML文档的情况,并配有完整的注释,非常具有实用价值,需要的朋友可以参考下
    2015-01-01
  • php获取$_POST同名参数数组的实现介绍

    php获取$_POST同名参数数组的实现介绍

    本篇文章是对php获取$_POST同名参数数组的实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • php UTF-8、Unicode和BOM问题

    php UTF-8、Unicode和BOM问题

    经常遇到的问题是,使用了BOM编码后,PHP脚本执行错误,或使用fileStream读取并转换为XML会报错"The markup in the document following the root element must be well-formed."。
    2010-05-05

最新评论