您好,欢迎光临赵帅的博客,如果有什么不足或者错误之处,感谢您留言指出!

【原创】山东大学 无线掉线自动连接助手(php curl)

php 赵 帅 340浏览 0评论

最近没有事情做,喜欢爬网页,感觉通过自己学得到的知识,可以方便生活,实现一些有趣的事情,挺好玩的。

好了,话不多说,今天还是介绍一个好玩的东西。

山东大学现在的无线连接不是特别好用,大概十分钟会掉一次线,需要手动再连一次。

所以,写个无线连接的小助手,方便自己,成就他人。

那么,我们用到的知识 还是 php 的 curl 函数。(想当强大的一个函数)

准备阶段

首先,我们做一下分析,需要知道我们要去哪里爬东西是不是:

大家可以看到这界面,其实比较简单,需要我们输入的是 学号密码(默认为身份证的后六位)。

那么 我们 先点击一下 连接,但是好像不是这么简单,我们使用chrome浏览器的控制查看一下:

20150920192957

从上面这个图可以看出来,我们需要访问的url应该就是

http://192.168.8.10/portal/login.jsp?Flag=0

为了访问的合法性,我们需要添加一些 header 信息,

$headerArr = array(
	'User-Agent' => 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36',
	'Host'=>'192.168.8.10',
        'Origin'=>'http://192.168.8.10',
        'Referer'=>'http://192.168.8.10/portal/index_default.jsp?Language=Chinese',
	'Content-Type' => 'application/x-www-form-urlencoded',
	'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
	'Cache-Control' => 'max-age=0',
	'Connection' => 'keep-alive'
);

20150920193146

那么下面,这个图就是展示的我们需要传递的 数据 (当然是使用 POST 方法):

$form = array(
	'Language'=>'Chinese',
	'ClientIP'=>$ip,
	'sessionID'=>'-6106489003554212615',
	'timeoutvalue'=>45,
	'heartbeat'=>240,
	'fastwebornot'=>false,
	'StartTime'=>time(),
	'username'=>$username,
	'password'=>$password,
	'shkOvertime'=>1,
	'strOldPrivateIP'=>$ip,
	'strOldPublicIP'=>$ip,
	'strPrivateIP'=>$ip,
	'PublicIP'=>$ip,
	'iIPCONFIG'=>0,
	'sHttpPrefix'=>"http://192.168.8.10"
);  

那么简单的分析一下上面的数据:

username  : 用户名
password  :  密码
ClientIp  : 客户端的ip地址,就是山东大学的ip 一般是以 ‘211.87’
StartTime : 开始 登录的时间 
shkOverTime : 登录的持续时间 默认是 720秒 就是在 12分钟之后 就会掉线

哈哈哈,分析完了之后,然后我就开始最重要的事情,那就是 开始 使用 curl 这个伟大的函数:

初始化:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://192.168.8.10/portal/login.jsp?Flag=0");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArr );  //构造IP
curl_setopt($ch, CURLOPT_REFERER, "http://192.168.8.10/portal/index_default.jsp?Language=Chinese");//构造来路
curl_setopt($ch, CURLOPT_HEADER, false);//不输出头文件 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 实现 不直接将信息 输出
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_NOBODY,1); /*不将 body 输出*/
curl_setopt($ch, CURLOPT_POST,true); 
curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($form));	// 注意 这一句 下面会有介绍		

其中 关于 curl  函数的一些 常量 ,之前有在 山东大学 课程小格  里面介绍过,在这里 必须 要介绍的一个地方就是,下面这个函数 http_build_query()  :

什么是http_build_query?

使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串。参数 formdata 可以是数组或包含属性的对象。一个 formdata 数组可以是简单的

一维结构,也可以是由数组组成的数组(其依次可以包含其它数组)。如果在基础数组中使用了数字下标同时给出了 numeric_prefix 参数,此参数值将会作

为基础数组中的数字下标元素的前缀。这是为了让 PHP 或其它 CGI 程序在稍后对数据进行解码时获取合法的变量名

http_build_query有多种用法,不仅可以传入关联数组,同时也可以传入索引数组,甚至多维数组以及对象

后期完善:

我们现在是可以 连接上了,可是还没有处理掉线的问题,那么我就在 一个 js 文件里面,写了一个 ajax 轮询,这样就可以实现掉线重连了:

// 2.异步请求
function repeat(){
	$.ajax({
		type:"post",
		url: './interface/mainController.php',
		async:true,
		success:function(data){
			if(data != -1){
			//	bodyMess += data+"<br>";
			}else{
				bodyMess += "从新连接QLSC_STU,不要着急~~~"+"<br>";
			}
			$("#logMess").html(bodyMess);
		}
	});
}
var rep = setInterval(repeat,710000);

到这里 项目的核心代码就差不多了,有没有很激动呢~~~

下面就给大家 先看一下整个项目的架构:
qq%e5%9b%be%e7%89%8720161024003013

整个项目就差不多完成了,想想就很激动呢,为了考虑用户体验,博主还专门写了个人认为蛮好看的登录界面呢:

2016-10-23-%e6%98%9f%e6%9c%9f%e6%97%a5-22-24-13

哈哈,到这里这个项目就结束了。

总结分享

这个小东西,纯属个人爱好,方便自己,便利他人。大神勿喷。如果有不足之处还请原谅.

如果有喜欢的朋友  猛戳   https://github.com/inger0/SduWL

 

转载请注明:碎念 » 【原创】山东大学 无线掉线自动连接助手(php curl)

喜欢 (9)or分享 (0)