热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CURL模拟登录

登录原理验证码通过session保存并验证,而session通过cookie获取SSID一、定义Cookie存储路径必须使用绝对路径$cookie_jardirn

登录原理

验证码通过session保存并验证,而session通过COOKIE获取SSID

一、定义COOKIE存储路径
必须使用绝对路径


$COOKIE_jar = dirname(__FILE__)."/this_test.COOKIE";//指定存储路径



二、获取COOKIE
COOKIE存入文件


$url = "http://web.mall.com/ ";    //用来测试的本地网站的url

$ch = curl_init();    //开启curl连接

//curl配置

curl_setopt($ch, CURLOPT_URL, $url);    //写入url

curl_setopt($ch, CURLOPT_HEADER, 0);    //是否有写入头信息需要写入=>false

curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);     

            //CURLOPT_RETURNTRANSFER设置为1 $content 有请求的返回值

    //当设置为0$content没有返回值,直接输出请求的内容

curl_setopt($ch, CURLOPT_COOKIEJAR,$COOKIE_jar);    //临时建立的COOKIE文件路径

$content = curl_exec($ch);    //执行curl,并把结果返回给一个字符串

curl_close($ch);    //关闭curl连接



三、把刚刚得到的COOKIE用来获取验证码图片

登陆界面 >表单中验证码相关字段与函数如下,可知验证码的地址

请输入您的用户名!"/>

请输入您的用户密码!"/>

请输入验证码!">

登录

functionform_login(){

    $(function(){

        $.ajax({

            url:"/login/checkUser",

           data:$("#login_Data").serialize(),

            dataType:"json",

            type:"post",

            success:function(msg){

                if(msg.err=="ok"){

                   window.location.href="/";

                }else{

                    alert(msg.err);

                }

            }

        });//ajax结束

    });

}


//可知验证码图片地址为http://web.mall.com/login/checkpic

//现在取出验证码图片

$verify_code_url="http://web.mall.com/login/checkpic";

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $verify_code_url);

curl_setopt($curl, CURLOPT_COOKIEFILE, $COOKIE_jar);

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);

然后通过表单把用户名、密码、验证码传入登陆验证的curlphp文件中去
四、POST提交到登陆验证的地址


$check_url=”http://web.mall.com/login/CheckUser”;//验证帐号的地址

$post = array(

            'username'=> $_POST['username'] ,

            'pwd'         => $_POST['pwd'],

            'checkCode'=>$_POST['checkCode']

            );

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"http://1.2.3.4/loginstudent.action");

curl_setopt($ch, CURLOPT_HEADER, false);

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch, CURLOPT_POSTFIELDS,$post);

curl_setopt($ch, CURLOPT_COOKIEFILE,$COOKIE_jar);

$result=curl_exec($ch);

curl_close($ch);



五、到指定页面获取数据


$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,"http://1.2.3.4/accountcardUser.action");

curl_setopt($ch, CURLOPT_HEADER, false);

curl_setopt($ch,CURLOPT_RETURNTRANSFER,0);        //直接输出页面

curl_setopt($ch, CURLOPT_COOKIEFILE,$COOKIE_jar);

$html=curl_exec($ch);

curl_close($ch);


 

六、获取完所需要的数据后,清理COOKIE文件
@unlink($COOKIE_file);


下面是我写了个对应案例

①【显示登陆框】index.php

$COOKIE_jar = dirname(__FILE__)."/this_test.COOKIE";//指定存储路径
$url = "http://web.mall.com/"; //我们以模拟登陆本地网址为例
$ch = curl_init(); //开启curl连接
//curl配置
curl_setopt($ch, CURLOPT_URL, $url); //写入url
curl_setopt($ch, CURLOPT_HEADER, 0); //是否有写入头信息需要写入=>false
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //当CURLOPT_RETURNTRANSFER设置为1时 $content 有请求的返回值//当设置为0是$content没有返回值,直接输出请求的内容
curl_setopt($ch, CURLOPT_COOKIEJAR, $COOKIE_jar); //临时建立的COOKIE文件路径
$content = curl_exec($ch); //执行curl, 并把结果返回给一个字符串
curl_close($ch); //关闭curl连接$now_url="http://".$_SERVER["HTTP_HOST"].$_SERVER['REQUEST_URI'];//获取当前目录网址
require 'get_verify_code.php';
echo <<








eof;







②【获取验证码】get_verify_code.php

$verify_code_url&#61;"http://web.mall.com/login/checkpic";
$curl &#61; curl_init();
curl_setopt($curl, CURLOPT_URL, $verify_code_url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $COOKIE_jar);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$img &#61; curl_exec($curl); //获取验证码图片
curl_close($curl);
$fp &#61; fopen("verifyCode.jpg","w");//将验证码图片保存到本地
fwrite($fp,$img);
fclose($fp);
?>




③【输出已登录的页面信息】result.php

$check_url&#61;"http://web.mall.com/login/CheckUser";//验证帐号的地址
$COOKIE_jar&#61;$_POST[&#39;COOKIE_jar&#39;];
$post &#61; array(
&#39;username&#39; &#61;> $_POST[&#39;username&#39;] ,
&#39;pwd&#39; &#61;> $_POST[&#39;pwd&#39;],
&#39;checkCode&#39;&#61;> $_POST[&#39;checkCode&#39;]
);
$ch &#61; curl_init();
curl_setopt($ch, CURLOPT_URL, $check_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);// post数据
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_COOKIEFILE, $COOKIE_jar);
$result&#61;curl_exec($ch);
curl_close($ch);//获取转跳页面的数据
$ch &#61; curl_init();
curl_setopt($ch, CURLOPT_URL, "http://web.mall.com/personal");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,0); //直接输出页面
curl_setopt($ch, CURLOPT_COOKIEFILE, $COOKIE_jar);
$html&#61;curl_exec($ch);
curl_close($ch);
$unlink($COOKIE_jar);






推荐阅读
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • Asp.net Mvc Framework 七 (Filter及其执行顺序) 的应用示例
    本文介绍了在Asp.net Mvc中应用Filter功能进行登录判断、用户权限控制、输出缓存、防盗链、防蜘蛛、本地化设置等操作的示例,并解释了Filter的执行顺序。通过示例代码,详细说明了如何使用Filter来实现这些功能。 ... [详细]
  • Python使用Pillow包生成验证码图片的方法
    本文介绍了使用Python中的Pillow包生成验证码图片的方法。通过随机生成数字和符号,并添加干扰象素,生成一幅验证码图片。需要配置好Python环境,并安装Pillow库。代码实现包括导入Pillow包和随机模块,定义随机生成字母、数字和字体颜色的函数。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
author-avatar
阿日小子很顽强_756
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有