php后台“爬虫”模拟登录第三方系统(三)---模拟登录学校正方系统

原创 2015年11月21日 01:35:32

cookie维持客户端和服务器端的交互

Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设置为启用cookie)。Cookie名称和值可以由服务器端开发自己定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等,服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。

登录过程

当我们打开登录界面时服务器便分配了一个session_id给浏览器来维持会话
这里写图片描述
输入用户名,密码以及验证码点击登录时,网页会把我们填的数据POST到服务器的一个地址中,服务器会先验证验证码是否正确,然后再验证用户名和密码。但是post的数据除了我们所填的数据,还存在一些隐藏的数据。我们用抓包工具把登录时post的数据抓来看看

这里写图片描述
这里写图片描述
当然我们也可以查看网页html代码来分析
这里写图片描述

验证码问题

当我们模拟登录时,我们需要post验证码,对于如何提交验证码
1.做验证码的图像识别
2.使用第三方的打码平台
3.把验证码分离出来,让用户自己填写
这里我采用第三种方式
这里写图片描述
我们很快便能发现验证码图片的链接,因此我们便可以轻易的分离出来使用,到此处,我们便可以开始编码进行模拟登录了

<?php
$act='';
define('SCRIPT_ROOT',dirname(__FILE__).'/');
if (isset($_REQUEST['act'])) {
   $act = trim($_REQUEST['act']);
}
$user = '';//用户名
$password = '';//密码
switch($act)
{
  case 'login':
      // 获取验证码
      $code = trim($_REQUEST['code']);       
      // $loginParams为curl模拟登录时post的参数
      $loginParams['__VIEWSTATE'] = 'dDwyODE2NTM0OTg7Oz6XQwtkC4IPj2mY5bsI42qRkaJNzw==';
      $loginParams['RadioButtonList1'] = '学生';
      $loginParams['TextBox2'] = $password;
      $loginParams['txtUserName'] = $user;
      $loginParams['Button1'] = '';
      $loginParams['lbLanguage'] = '';
      $loginParams['hidPdrs'] = '';
      $loginParams['hidsc'] = '';
      $loginParams['txtSecretCode'] = $code;        
      // $cookieFile 为加载验证码时保存的cookie文件名 
      $cookieFile = SCRIPT_ROOT.'cookie.tmp';
      // $targetUrl curl 提交的目标地址
      $targetUrl = 'http://202.116.160.170/default2.aspx';  
      // 参数重置
      $content = curlLogin($targetUrl, $cookieFile, $loginParams);
      echo $content;
      break;
      case 'authcode':
      // Content-Type 验证码的图片类型
      header('Content-Type:image/png charset=gb2312');
      showAuthcode('http://202.116.160.170/CheckCode.aspx');
      exit;
     break;
}


function curlLogin($url, $cookieFile, $loginParams)
{   
    $user = '';//用户名
    $password = '';//密码
    $ch = curl_init($url);
    curl_setopt($ch,CURLOPT_COOKIEFILE, $cookieFile); //同时发送Cookie
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);//设定返回的数据是否自动显示
    curl_setopt($ch, CURLOPT_HEADER, 0);//设定是否显示头信 息
    curl_setopt($ch, CURLOPT_NOBODY, false);//设定是否输出页面 内容
    curl_setopt($ch,CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch,CURLOPT_POSTFIELDS, $loginParams); //提交查询信息
    curl_exec($ch);//返回结果
    curl_close($ch); //关闭
    $curl2=curl_init();
    curl_setopt ($curl2,CURLOPT_REFERER,'http://202.116.160.170/xs_main.aspx?xh='.$user.'#a');
    curl_setopt($curl2, CURLOPT_COOKIEFILE, $cookieFile); 
     curl_setopt($curl2, CURLOPT_HEADER, false); 
     curl_setopt($curl2, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($curl2, CURLOPT_TIMEOUT, 20); 
     curl_setopt($curl2, CURLOPT_AUTOREFERER, true); 
     curl_setopt($curl2, CURLOPT_FOLLOWLOCATION, true); 
     curl_setopt($curl2, CURLOPT_URL, 'http://202.116.160.170/xskbcx.aspx?xh='.$user);//登陆后要从哪个页面获取信息
     $en_contents=mb_convert_encoding( curl_exec($curl2),'utf-8', array('Unicode','ASCII','GB2312','GBK','UTF-8')); 
     preg_match_all('/<span id="Label[^>]*>(.*)<\/span>/isU',$en_contents,$out);
     var_dump($out);
     $student = explode(':', $out[1][6]);
     $studentInfo[0] = $student[1];
     $student = explode(':', $out[1][5]);
     $studentInfo[1] = $student[1];
     $student = explode(':', $out[1][2]);
     $studentInfo[2] = substr(trim($student[1]), 0,4);
     var_dump($studentInfo);
     preg_match_all('/<table id="Table1"[\w\W]*?>([\w\W]*?)<\/table>/',$en_contents,$out);
     $table = $out[0][0]; 
     preg_match_all('/<td [\w\W]*?>([\w\W]*?)<\/td>/',$table,$out);
     $td = $out[1];
     $length = count($td);
     //获得课程列表
     for ($i=0; $i < $length; $i++) {
       $td[$i] = str_replace("<br>", "", $td[$i]);
       $reg = "/{(.*)}/";
       if (!preg_match_all($reg, $td[$i], $matches)) {
         unset($td[$i]);
       }
     }
     $td = array_values($td); //将课程列表数组重新索引
     $tdLength = count($td);
     //将课表转换成数组形式
     echo "<pre>";
     var_dump($td);
     curl_close($curl2);
}

/**
 * 加载目标网站图片验证码
 * string $authcode_url 目标网站验证码地址
 */
function showAuthcode( $authcode_url )
{
    $cookieFile = SCRIPT_ROOT.'cookie.tmp';
    $ch = curl_init($authcode_url);
    curl_setopt($ch,CURLOPT_COOKIEJAR, $cookieFile); // 把返回来的cookie信息保存在文件中
    curl_setopt($ch, CURLOPT_HEADER, 1);
    $content =curl_exec($ch);
    var_dump($cookieFile);
    curl_close($ch);
}
?>
<iframe src="?act=authcode" style='width: 100px; height:40px ' frameborder=0 ></iframe>
<form>
<input type="hidden" name="act" value="login">
<input type="text" name="code" />
<input type="submit" name="submit" >
</form>

这里写图片描述
这里写图片描述

个人博客:http://www.javaknowledge.cn/?p=59

版权声明:

相关文章推荐

绕过验证码,模拟登录 php

这几天一直在做识别验证码的API,已经做出来了,不过我突然有发现可以绕过验证码, 先上代码 <?php header("Content-Type: text/html; charset=utf-8")...
  • Away_D
  • Away_D
  • 2015-08-13 15:48
  • 5282

【CURL】模拟登录网站并获取用户信息

模拟登录网站并获取用户信息前言这次来做的是通过代码的方式,模拟登录秒拍官网,获取登录用户的信息。前后端分离本文的标题是CURL,传统的网站是PHP代码直接渲染项目视图,通过表单提交到控制器直接进行数据...

使用PHP-curl获取验证码并模拟登录教务系统

首先说一下这篇文章的需求,当我们在一些没有提供验证接口的系统中,需要验证用户身份的时候,就可能需要用户登录当前系统,从而确定该用户是当前系统的合法用户,校园的教务系统就是一个典型的例子,我们通过学生自...

php 使用curl模拟登录人人(校内)网的简单实例

http://www.jb51.net/article/86003.htm $login_url = 'http://passport.renren.com/PLogin.do';...

php后台“爬虫”模拟登录第三方系统(二)---正则表达式的介绍

使用cURL抓取到页面的数据是html 字符串 ,需要用正则表达式进行分割,存储到数组等地方。下面简单介绍一下php中的正则表达式。正则表达式的概述正则表达式(Regular expression,简...

php后台“爬虫”模拟登录第三方系统(一)---cURL的介绍

一.相关知识介绍在服务器后台使用爬虫对第三方进行模拟登录,登录后可进行数据收集。也可以作为第三方登录,用处之多,我便不做细讲。 所具备的的知识: 1.curl知识 2.sesson和cookie...

Python项目模拟登录学校正方教务系统抓取课程表。

本人最近偶然遇到python这门语言,发现这门语言在数据抓取文成非常不错。研究了两天实现了一个小项目,当然中间也参考了许多博客.下面我把我自己的经历给大家分享一下。如果自己学校的教务系统也是这个公司的...

江西理工大学正方教务系统查成绩(模拟登录)

l 我写的查成绩快捷通道在树人网公布一个学期了,也应收到大量同校同学的询问,与大量的建议与批评,首先很感谢大家。前两三个月因为在准备软考,与本专业认证考试H3CNA,和这个考试月,一直泡在图书馆,...

用java模拟登录正方教务系统,抓取课表和个人成绩等数据

之前学了一些java web的编程,理解了web应用的原理后,就突然想到,可以用java模拟登录吉珠的教务系统,然后爬取里面的课表、成绩、个人信息等等数据,然后就可以写一个简易的课表APP。
  • EsauLu
  • EsauLu
  • 2017-03-24 22:21
  • 1051

用Python模拟登录正方教务系统并抓取初始网页的一些个人笔记

还是SCAU。。。 SCAU有着和许多大学
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)