热门标签 | 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);






推荐阅读
  • 在Laravel中实现PHP对JSON数据的发布与处理 ... [详细]
  • 在处理大文件上传时,服务端为何无法直接接收?这主要与 PHP 配置文件 `php.ini` 中的几个关键参数有关,如 `upload_max_filesize` 和 `post_max_size`。这些参数分别限制了单个文件的最大上传大小和整个 POST 请求的数据量。为了实现大文件的高效上传,可以通过文件分割与分片上传的方法来解决。本文将详细介绍这一实现方法,并提供相应的代码示例,帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 本文介绍了如何通过掌握 IScroll 技巧来实现流畅的上拉加载和下拉刷新功能。首先,需要按正确的顺序引入相关文件:1. Zepto;2. iScroll.js;3. scroll-probe.js。此外,还提供了完整的代码示例,可在 GitHub 仓库中查看。通过这些步骤,开发者可以轻松实现高效、流畅的滚动效果,提升用户体验。 ... [详细]
  • 本课程详细介绍了如何使用Python Flask框架从零开始构建鱼书应用,涵盖高级编程技巧和实战项目。通过视频教学,学员将学习到Flask的高效用法,包括数据库事务处理和书籍交易模型的实现。特别感谢AI资源网提供的课程下载支持。 ... [详细]
  • Django框架进阶教程:掌握Ajax请求的基础知识与应用技巧
    本教程深入探讨了Django框架中Ajax请求的核心概念与实用技巧,帮助开发者掌握异步数据交互的方法,提升Web应用的响应速度和用户体验。通过实例解析,详细介绍了如何在Django项目中高效实现Ajax请求,涵盖从基础配置到复杂场景的应用。 ... [详细]
  • Select2.js下拉框应用总结与实践要点
    在使用Select2.js下拉框插件的过程中,积累了诸多实践经验与心得。尽管最初觉得Select2在某些方面不尽如人意,但在对比了其他选项后,发现其仍是最优选择。本文将详细探讨Select2.js的配置、优化技巧及常见问题解决方法,帮助开发者更好地利用这一强大的前端工具。 ... [详细]
  • 本文初步探讨了PHP中基于JWT(JSON Web Token)的身份验证机制。具体流程包括:1. 客户端通过用户名和密码发起登录请求;2. 服务器接收并验证用户凭证的合法性,若验证通过,则生成并返回一个JWT令牌;3. 客户端接收该令牌,并在后续请求中携带此令牌以完成身份验证。这一机制不仅提高了安全性,还简化了会话管理。 ... [详细]
  • 微信支付授权目录配置详解及操作步骤
    在使用微信支付时,若通过WeixinJSBridge.invoke方法调用支付功能,可能会遇到“当前页面URL未注册”的错误提示,导致get_brand_wcpay_request:fail调用微信JSAPI支付失败。为解决这一问题,需要正确配置微信支付授权目录,确保支付页面的URL已成功注册。本文将详细介绍微信支付授权目录的配置步骤和注意事项,帮助开发者顺利完成支付功能的集成与调试。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 本文深入探讨了 Vue.js 中异步组件的应用与优化策略。首先,文章介绍了异步组件的基本概念及其在现代前端开发中的重要性。为了确保最佳实践,建议使用 Webpack 作为模块打包工具,因为 Browserify 默认不支持异步组件的加载。接着,详细解释了异步组件的使用方法,并提供了官方文档的相关链接以供参考。此外,文章还讨论了多种优化技巧,包括代码分割、懒加载和性能调优,以提升应用的整体性能和用户体验。 ... [详细]
  • 探索JavaScript倒计时功能的三种高效实现方法及代码示例 ... [详细]
  • 需求:在指定的DIV区域内点击时,需展示该区域内的附加操作面板;而在区域外点击时,则应自动隐藏该附加操作面板。通过精准的事件监听与处理,确保用户交互体验的流畅性和直观性。 ... [详细]
  • npm 发布 WhalMakeLink 包:链接管理与优化的新选择
    WhalMakeLink 是一个强大的 npm 工具,专为项目管理和优化而设计。它能够自动在项目的 README 文件中生成当前工程目录下所有子项目的链接地址,极大提升了开发效率和文档维护的便捷性。通过简单的 `npm init` 命令即可快速启动和配置该工具,适用于各种复杂项目结构。 示例演示了其基本用法和功能。 ... [详细]
  • 初次接触AJAX是在去年,当时主要是通过手动编写客户端代码来实现,还需处理被请求的页面,过程相当繁琐。尽管之前就听说过AJAX.NET,但一直没有机会深入了解。本文将作为初学者的指南,详细介绍AJAX.NET的基本概念、核心功能及其在实际项目中的应用技巧,帮助读者快速上手并掌握这一强大的开发工具。 ... [详细]
  • 多进程程序异常退出问题分析与解决 ... [详细]
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社区 版权所有