代码如下

$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("/

(.*)/",$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("/

(.*)/",$contents,$arr);

echo $arr[1];

curl_close($ch);

但是最后却回到了登录的界面,小白求大神解答

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

HTTP 请求过程中的 Cookie 由 HttpClient/CURL 自动处理.

楼主发的代码应该是没问题的, 感觉应该是没有提交 RadioButtonList1 和 Button1 这两个数据.

还有那个__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*(.*)/', $html, $result);

var_dump($result);

https://github.com/lndj/Lcrawl/tree/dev

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

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php模拟登陆青果教务系统,模拟登录 - php CURL模拟登陆正方教务系统相关推荐

  1. 三国杀充值登陆服务器响应超时,三国杀登录超时怎么办?登陆失败解决方法[多图]...

    三国杀登录超时怎么办?今日不止一个两个的玩家在登陆的时候,发现未知的错误,导致账号登陆补上去,这样一来自己也就无法进入到游戏当中去体验了.下面就为大家带来三国杀登陆失败解决方法. 最近三国杀迎来了重点 ...

  2. php模拟登陆,php实现模拟登陆正方教务系统

    本文主要介绍通过php的curl库实现正方教务系统的登陆,由于正方教务系统每年可能会有一些更新,因此本文是针对2018年而言,所介绍一些模拟登陆正方的方法,希望能帮助到大家. 1.保存登陆界面的验证码 ...

  3. php模拟登陆正方教务系统(2018年)

    php模拟登陆正方教务系统(2018年) 本文主要介绍通过php的curl库实现正方教务系统的登陆,由于正方教务系统每年可能会有一些更新,因此本文是针对2018年而言,所介绍一些模拟登陆正方的方法. ...

  4. java模拟登录新版正方_java 模拟登陆正方教务系统

    比较懒,主要说一下思路.. 1.首先正方教务系统的验证码当你不去向服务器申请的时候,可以直接无视它不需要去输入验证码.可以通过浏览器屏蔽学校教务系统的图片就可以直接输入账号密码回车进去.. 2.通过抓 ...

  5. php正方系统抓取课表,以正方教务系统为例,用php模拟登陆抓取课表、空教室,抓取课表...

    以正方教务系统为例,用php模拟登陆抓取课表.空教室,抓取课表 课程格子和超级课程表这两个应用,想必大学生都很熟悉,使用自己的学号和教务系统的密码,就可以将自己的课表导入,随时随地都可以在手机上查看. ...

  6. nodejs模拟登陆旧版正方教务系统

    nodejs模拟登陆旧版正方教务系统 nodejs模拟登陆学校教务系统 1.分析教务系统地址 2.分析请求头和请求数据 3.对Cookie.__VIEWSTATE数据的获取 (1)获取cookie ( ...

  7. 基于Python 3.11.0版本模拟登录并爬取西安理工大学正方教务系统的学分绩点并计算

    目录 使用软件以及运行环境 对于环境的搭建 代码思路 需要导入的包 模拟登录 爬取数据 绩点计算器 功能一 功能二 完整代码 使用软件以及运行环境 win10系统,Vs Code软件,Python 3 ...

  8. Java--使用httpClient模拟登陆正方教务系统获取课表

    最近形如课程格子与超表课程表应用如雨后春笋般涌现,他们自动获取课程表是怎么实现的呢.于是我用Java实现了一下模拟登陆正方教务系统获取课表的过程. 首先,我们先了解一下网站登录的原理:当我们输入学号, ...

  9. python模拟正方教务系统登录

    目录 一.抓包检查请求信息 进入教务系统首先随便输一个号进行抓包,发现default2.axps包是使用post请求 在该文件下找到标头和负载信息 _VIEWSTATE: txtUserName:学号 ...

最新文章

  1. 搜狗手机输入法php,在线调用搜狗云输入法
  2. 星云精准测试之用例魔方
  3. spring-boot-maven-plugin插件找不到含有main的主类
  4. 如何修改product base category
  5. 5岁自学python编程-三十岁了还可以学编程吗?只要你想,只要你做,什么时候都不晚...
  6. Python----进程之间共享数据(全局变量)
  7. Erlang中的record与宏
  8. Linux运维文档之nginx
  9. GPU架构变迁之AI系统视角:从费米到安培
  10. 隐私权斗士库克:出身平凡 从小喜欢伸张正义
  11. 利用pygame写星球大战小游戏
  12. 苏宁API:item_get - 获得suning商品详情
  13. Hibernate第九篇【组件映射、继承映射】
  14. 天津市科技领军企业和领军培育企业补助奖励及认定条件,补贴500万
  15. 【ODYSSEY-STM32MP157C】上报数据到阿里云 IoT 平台
  16. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day14】—— 数据库3
  17. 关闭Pinterest通知
  18. 机械设备行业:工业气体企业财务分析
  19. Django 数据库连接使用
  20. 数据分析项目实战day1

热门文章

  1. setsockopt和getsockopt函数详解
  2. linux自定义刷新率,Linux下设置其分辨率及刷新率
  3. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第三章:类和对象进阶(新标准C++程序设计)
  4. 为什么要写引言,引言的目的是啥?
  5. 复式记账php版,复式记账法下,账户间存在着( )。
  6. 通过CURL请求示例详解HTTPS协议
  7. [事件知识图谱] EventKG: A Multilingual Event-Centric Temporal Knowledge Graph
  8. 学习表——受任于败军之际,奉命于危难之间(2.20--2.26)
  9. 看,2021年,一个普通应届生的成长之旅
  10. 1000x计算机 案例解析,索尼WI-1000X耳机连接win10电脑方法讲解