PHP基于curl后台远程登录正方教务系统的方法


Posted in PHP onOctober 14, 2016

本文实例讲述了PHP基于curl后台远程登录正方教务系统的方法。分享给大家供大家参考,具体如下:

从去年想这个事情怎么解决,今年终于算是把他搞清楚了,但验证码必须要填。

如果你能像360抢票哪有自动识别验证码,那就没事了。废话不多扯了。回归正题

这里要用CURL。

设计思路:先登录页面获取COOKIES,然后拿着cookies找服务器要验证码。最后提供服务器需要的全部信息。

(这种思维是完全模拟游览器访问页面,根本区别出来是人还机器)

public function index(){
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url); //填对于的URL就可以了
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
 curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); //主要cookie的路径,本保存页面cookie
 curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //返回结果自动输出
 $response = curl_exec($ch);
 curl_close($ch);
}

访问正方教务系统的首页,第一获取页面中的HTML,第二是获取cookies。

其他的就想问?获取HTML有啥用?

如果你细心观察教务系统首页的HTML的话,你会发现里面有很多隐藏字段,而这些字段又是变化的。
所以你干脆把HTML都获取然后解析,然后把需要的字段都桃出来

PHP基于curl后台远程登录正方教务系统的方法

HTML结构

看到没有,那么的隐藏字段,都是提交数据的必须,而且不能多。

PHP基于curl后台远程登录正方教务系统的方法

页面效果

接下来我要将一个最重要的问题,怎么获取验证码?

开始我想直接

<img src="xxxx/CheckCode.aspx" />

不就行了?这样验证码虽然是出来,但这个验证码不属于你,所以在你存远程登录时候,都会告诉你,验证码错误

那怎么获取属于自己的验证码呢?这时候,自然想到的是cookies。

服务器是怎么区分游览器请求是不是同一个人,就看cookies里面的sessionid了

这样。你拿着你在首页获取到的cookies,再找服务器要你的验证码,它会给错?

public function getImg()
{
    $url = "http://xxxx/CheckCode.aspx";
    $filedir = SITE_PATH."/TMP/Cookies";
    $cookie_file = $filedir."/cookie.txt";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); //
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_TIMEOUT, "10");
    header("Content-type:image/gif"); //这个视不同图片格式不一样,请注意
    echo curl_exec($ch);
    curl_close($ch);
}

然后再在其他页面调用这个方法,你就可以获取到验证码。

CURL的PHP请求跟你游览器发出的PHP属于两个不同的线程,所以,他们的cookies是不同共用的。

这样你就可以登录了,但不要以为这样登录了,你可以操作全部功能了,那你就想错了。还有一个很小的细节。。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php 操作excel文件的方法小结
Dec 31 PHP
php将数据库中所有内容生成静态html文档的代码
Apr 12 PHP
session在PHP大型web应用中的使用
Jun 25 PHP
php实现文件下载(支持中文文名)
Dec 04 PHP
php使用memcoder将视频转成mp4格式的方法
Mar 12 PHP
PHP+MYSQL实现读写分离简单实战
Mar 13 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
PHP实现权限管理功能示例
Sep 22 PHP
PHP闭包定义与使用简单示例
Apr 13 PHP
PHP输出Excel PHPExcel的方法
Jul 26 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
php车辆违章查询数据示例
Oct 14 #PHP
基于PHPexecl类生成复杂的报表表头示例
Oct 14 #PHP
php+jQuery递归调用POST循环请求示例
Oct 14 #PHP
php实现将HTML页面转换成word并且保存的方法
Oct 14 #PHP
PHP中多线程的两个实现方法
Oct 14 #PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
Oct 14 #PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 #PHP
You might like
使用sockets:从新闻组中获取文章(三)
2006/10/09 PHP
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
php中使用gd库实现下载网页中所有图片
2015/05/12 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
ExtJs之带图片的下拉列表框插件
2010/03/04 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
JavaScript中的document.referrer在各种浏览器测试结果
2014/07/18 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
jquery中one()方法的用法实例
2015/01/16 Javascript
jQuery点击按钮弹出遮罩层且内容居中特效
2015/12/14 Javascript
JavaScript中的Object对象学习教程
2016/05/20 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
JavaScript原型链与继承操作实例总结
2018/08/24 Javascript
JavaScript实现移动端带transition动画的轮播效果
2020/03/24 Javascript
vue实现购物车加减
2020/05/30 Javascript
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
[04:05]TI9战队采访 - Natus Vincere
2019/08/22 DOTA
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
Python实现批量压缩图片
2018/01/25 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
numpy矩阵数值太多不能全部显示的解决
2020/05/14 Python
win10安装python3.6的常见问题
2020/07/01 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
朗仕(Lab series)英国官网:雅诗兰黛集团男士专属护肤品牌
2017/11/28 全球购物
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
关于国庆节的演讲稿
2014/09/05 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
先进个人申报材料
2014/12/30 职场文书
打架检讨书
2015/01/27 职场文书
大学生暑假实习总结
2015/07/13 职场文书
Python连续赋值需要注意的一些问题
2021/06/03 Python
JavaScript执行机制详细介绍
2021/12/06 Javascript