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

模拟登录-phpCURL模拟登陆正方教务系统

代码如下{代码...}但是最后却回到了登录的界面,小白求大神解答
代码如下

$COOKIE_file    =    tempnam('./temp','COOKIE');
$login_url        =    'http://211.64.47.129/default_ysdx.aspx';
$post_fields    =    '__VIEWSTATE=dDw1MjQ2ODMxNzY7Oz7xlHJHd0KfeVRA2p7BXNto118wbQ==&TextBox1=学号&TextBox2=密码';

$ch = curl_init($login_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, $COOKIE_file);

curl_exec($ch);
curl_close($ch);


$url='http://211.64.47.129/xs_main.aspx?xh=学号';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
curl_setopt($ch, CURLOPT_COOKIEFILE, $COOKIE_file);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

$cOntents= curl_exec($ch);
preg_match("/
  • (.*)<\/li>/",$contents,$arr); echo $arr[1]; curl_close($ch);
  • 但是最后却回到了登录的界面,小白求大神解答

    回复内容:

    代码如下

    $COOKIE_file    =    tempnam('./temp','COOKIE');
    $login_url        =    'http://211.64.47.129/default_ysdx.aspx';
    $post_fields    =    '__VIEWSTATE=dDw1MjQ2ODMxNzY7Oz7xlHJHd0KfeVRA2p7BXNto118wbQ==&TextBox1=学号&TextBox2=密码';
    
    $ch = curl_init($login_url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $COOKIE_file);
    
    curl_exec($ch);
    curl_close($ch);
    
    
    $url='http://211.64.47.129/xs_main.aspx?xh=学号';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $COOKIE_file);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    
    $cOntents= curl_exec($ch);
    preg_match("/
  • (.*)<\/li>/",$contents,$arr); echo $arr[1]; curl_close($ch);
  • 但是最后却回到了登录的界面,小白求大神解答

    根据楼主的要求, 配合我自己写的 HttpClient 的类, 编写的代码如下, 但因为没有测试账号, 所以测试时使用的账号和密码为 test, 返回的结果是登陆失败, 楼主只需要修改代码里的账号和密码, 应该就可以了.
    HTTP 请求过程中的 COOKIEHttpClient/CURL 自动处理.

    楼主发的代码应该是没问题的, 感觉应该是没有提交 RadioButtonList1Button1 这两个数据.
    还有那个__VIEWSTATE 虽然看起来是固定的, 但为了保险期间, 还是应该从页面中获取到之后, 再提交登陆.

    附代码:

    ch = curl_init();
            curl_setopt($this->ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/4.0; QQDownload 685; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)');//UA
            curl_setopt($this->ch, CURLOPT_TIMEOUT, 40);
            curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, TRUE);
            curl_setopt($this->ch, CURLOPT_AUTOREFERER, true);
            curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, TRUE);
            curl_setopt($this->ch, CURLOPT_COOKIEJAR, $COOKIE_jar);
            curl_setopt($this->ch, CURLOPT_COOKIEFILE, $COOKIE_jar);
        }
    
        function __destruct(){
            curl_close($this->ch);
        }
    
        final public function setReferer($ref=''){
            if($ref != ''){
                curl_setopt($this->ch, CURLOPT_REFERER, $ref);
            }
        }
    
        final public function Get($url, $header=false, $nobody=false){
            curl_setopt($this->ch, CURLOPT_POST, false);
            curl_setopt($this->ch, CURLOPT_URL, $url);
            curl_setopt($this->ch, CURLOPT_HEADER, $header);
            curl_setopt($this->ch, CURLOPT_NOBODY, $nobody);
            return curl_exec($this->ch);
        }
    
        final public function Post($url, $data=array(), $header=false, $nobody=false){
            curl_setopt($this->ch, CURLOPT_URL, $url);
            curl_setopt($this->ch, CURLOPT_HEADER, $header);
            curl_setopt($this->ch, CURLOPT_NOBODY, $nobody);
            curl_setopt($this->ch, CURLOPT_POST, true);
            curl_setopt($this->ch, CURLOPT_POSTFIELDS, http_build_query($data));
            return curl_exec($this->ch);
        }
    }
    
    
    const Login_URL = 'http://211.64.47.129/default_ysdx.aspx';
    
    $http = new HttpClient(tempnam('./temp','COOKIE'));
    
    
    $html = $http->Get(Login_URL);//先请求登陆页面, 获取 __VIEWSTATE
    
    preg_match('/name="__VIEWSTATE" value="(.+?)"/', $html, $vs);
    
    if(count($vs) !== 2){
        echo '获取viewstate失败';
        exit();
    }
    
    //构造登陆时的数据
    $data = array(
        '__VIEWSTATE'=>$vs[1],//__VIEWSTATE
        'TextBox1'=>'username',//修改此处的用户
        'TextBox2'=>'password',//和密码
        'RadioButtonList1'=>'学生',//以及身份类型
        'Button1'=>'  登录  '
    );
    
    $html = $http->Post(Login_URL, $data);
    
    preg_match('/language=\'Javascript\'>alert\(\'(.+?)\'\);/', $html, $err);
    
    //检测是否出错, 如果有出错, 则显示错误信息, 然后退出
    if(count($err) === 2){
        echo $err[1];
        exit();
    }
    
    
    
    
    $sn = '123123';//学号
    
    $html = $http->Get('http://211.64.47.129/xs_main.aspx?xh='. $sn);
    
    preg_match('/
  • \s*(.*)<\/li>/', $html, $result); var_dump($result);
  • https://github.com/lndj/Lcrawl/tree/dev

    一只优雅的正方教务系统爬虫。

    推荐阅读
    • Java验证码——kaptcha的使用配置及样式
      本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
    • Windows下配置PHP5.6的方法及注意事项
      本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
    • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
    • GetWindowLong函数
      今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
    • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
      本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
    • 如何去除Win7快捷方式的箭头
      本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
    • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
    • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
    • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
    • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
    • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
      本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
    • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
    • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
    • 知识图谱——机器大脑中的知识库
      本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
    • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
      原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
    author-avatar
    阿宝宝86
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有