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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM