zoukankan      html  css  js  c++  java
  • NEU校园网登录器

    http://www.cnblogs.com/weidiao/p/5124106.html

    改自学长的博客。

    我们的目标是写一个程序实现自动登录校园网。而这基于的是表单的post机制。

    输入校园网网址:tree.neu.edu.cn,弹出界面如下:

     观察到进入该界面后网址变为“http://tree.neu.edu.cn:804/srun_portal_pc.php?ac_id=1&url=”,804是端口,“srun_portal_pc.php”是其下的一个子文件,?后面的“ac_id=1&url=”是参数信息,其中&是分隔符。

    我们要做的就是用java实现输入用户名、密码并依次点击断开全部链接、连接网络四个操作步骤。具体实现,就是向一个URL发送请求信息。

    查看网页源代码,表单部分代码如下,当用户单击确认按钮时,表单的内容会被传送到另一个文件。表单的action定义了目的文件的文件名。由其定义的这个文件通常会对接收到的输入数据进行相关的处理。

    观察到连接网络、断开网络、断开全部连接这三个选项,其中只有连接网络是submit,另两个是button按钮,按下后激发do_logout()函数,另两个按钮效果无区别,学校本来想设计的是单账号多处登录,但实际是单端口单登录,多登录并未实现。

    当我们点击断开网络的时候,激发“do_logout()”函数。

    在当前页面下按F12,弹出控制台,我们就能看到do_logout()函数的具体实现了。

    函数使用jQuery的$.post方法以POST形式向服务器发起AJAX请求。

    $.post(url,parameters,callback)

    参数

     

    url

    (字符串)服务器端资源地址。

    parameter

    (对象)需要传递到服务器端的参数。 参数形式为“键/值”。

    callback

    (函数)在请求完成时被调用。该函数参数依次为响应体和状态。

    返回值

    XHR实例

    点击后,传递的参数有action,username,password及ajax。

    因此,我们需要向服务器端资源地址传递以上信息。

    post(host+"include/auth_action.php", data+"&action=logout&ajax=1"); 

    再来看看登录的实现。

    刚才说过只有连接网络是submit。为什么只有这个是submit呢?因为假如三个按钮都是提交按钮,那服务器就无法区别了。

    POST  srun_portal_pc.php?ac_id=1&url=   HTTP/1.1
    host: xxxxxxx
    User-Agent: xxxxxx
    Cookie: xxxxxx

    username=xxxx&password=xxxx
    我们要做的就是将以上字符串信息发送过去。这是http协议,可以用TCP SOCKET实现。(蒟蒻暂不会)
     
    言归正传。看到表单信息:<form name="form2" action="srun_portal_pc.php?ac_id=1&url=" class="form-horizontal" method="post" onsubmit="return check(this)">
    当我们点击登录按钮,表单的内容会被传送到action定义的目的文件,并交由其处理,而onsubmit则实现了提交过程中执行的函数。
    因此,需要向action定义的文件发送信息。
    (有些奇怪,没找到这个php文件......)
    翻了一下,check1()函数里有这样的代码:

    check2()里有这样的代码:

     

     
    那究竟怎么写呢??
    不清楚。不过下面这么写确实能够登录上去。
    post(host+"srun_portal_pc.php", data+"&action=login&ac_id=1");
    post(host+"srun_portal_pc.php?ac_id=1&url=", data+"&action=login");//这么写也可以。
     
    发送的信息包括各种name及value,&name=value的形式。
    观察到form表单里有action=login,ac_id=1,以及username和password。
    所以怎么写呢?
    post(host+"srun_portal_pc.php", data+"&action=login&ac_id=1");
    以上就实现了自动登录校园网的功能。
    完整代码如下:
     1 import java.io.BufferedReader;
     2 import java.io.DataOutputStream;
     3 import java.io.IOException;
     4 import java.io.InputStreamReader;
     5 import java.net.HttpURLConnection;
     6 import java.net.URL;
     7 import java.net.URLEncoder;
     8 
     9 public class Main {
    10     public static void main(String[] args) throws IOException {
    11         String host = "http://tree.neu.edu.cn:803/";
    12         String username = "???", password = "???";
    13         String data = "username="+username+"&password="+password;
    14         post(host+"include/auth_action.php", data+"&action=logout&ajax=1");
    15         post(host+"srun_portal_pc.php", data+"&action=login&ac_id=1");
    16         //post(host+"srun_portal_pc.php?ac_id=1&url=", data+"&action=login");
    17     }
    18  
    19     static void post(String url, String data) throws IOException{
    20         URL postUrl = new URL(url);
    21         HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();
    22         connection.setDoOutput(true);
    23         connection.setDoInput(true);
    24      
    25         DataOutputStream out = new DataOutputStream(connection
    26              .getOutputStream());
    27         out.writeBytes(data);
    28      
    29         /////////////////////////////分割线/////////////////////
    30         BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
    31 String line; 32 while ((line = reader.readLine()) != null){ 33 System.out.println(line); 34 } 35 36 reader.close(); 37 connection.disconnect(); 38 } 39 }
     代码中分割线以下的将该网页的源码全部读下了。
    关于http请求的资料:
    http://blog.csdn.net/darxin/article/details/4944225
  • 相关阅读:
    WRF WPS预处理
    CVS安装
    Linux窗口最小化消失,任务栏上无法找到的解决方法
    NCARG安装配置出现error while loading shared libraries: libg2c.so.0问题额解决办法
    Netcdf安装
    Embedding R-generated Interactive HTML pages in MS PowerPoint(转)
    The leaflet package for online mapping in R(转)
    Some 3D Graphics (rgl) for Classification with Splines and Logistic Regression (from The Elements of Statistical Learning)(转)
    What does a Bayes factor feel like?(转)
    Weka算法介绍
  • 原文地址:https://www.cnblogs.com/dirge/p/5616168.html
Copyright © 2011-2022 走看看