有的時候,會需要使用java的程式訪問網頁,正常的訪問網頁的程式很多,也沒有什麼可講的,在這裡主要說明一下如何使用java的訪問網頁時,需要登入時,如何保持登入的程式。
先簡單講解一下原理:實際上網頁和伺服器是兩套應用,Client Access Server一次,實際上網頁擷取後,串連立即就斷了,這樣的話,說明伺服器是不會保持長效串連的,但是在現實情況登入的話,用戶端好像一直在保留串連,那麼這種情況就和先前模式似乎不同;當然不是,中斷連線是整個B/S架構的根本原理所在,因此怎麼去保持這些串連,實際上就是利用Cookie,訪問網頁時,每次網頁的伺服器會產生一個Cookie,記錄當前網頁的一個索引值,如果使用登入了後,伺服器端的Session就會和用戶端的一個Cookie產生串連,這樣每次給這個頁面發送用戶端的Cookie所記錄的Session的標識,即可完成登入的類比。
代碼如下:
[java]
view plaincopyprint?
- URL url = new URL("網頁");
- HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- connection.setDoOutput(true);//允許串連提交資訊
- connection.setRequestMethod("POST");//網頁提交方式“GET”、“POST”
- connection.setRequestProperty("User-Agent",
"Mozilla/4.7 [en] (Win98; I)");
- StringBuffer sb = new StringBuffer();
- sb.append("username=admin");
- sb.append("&password=admin");
- OutputStream os = connection.getOutputStream();
- os.write(sb.toString().getBytes());
- os.close();
-
-
- BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
-
-
-
-
- String responseCookie = connection.getHeaderField("Set-Cookie");//取到所用的Cookie
- System.out.println("cookie:" + responseCookie);
- String line = br.readLine();
-
-
- while (line != null) {
-
-
- System.out.println(new String(line.getBytes()));
-
-
- line = br.readLine();//打出登入的網頁
-
-
- }
- //acces
- URL url1 = new URL("網頁的登入後的頁面");
- HttpURLConnection connection1 = (HttpURLConnection) url1.openConnection();
- connection1.setRequestProperty("Cookie", responseCookie);//給伺服器送登入後的cookie
- BufferedReader br1 = new BufferedReader(new InputStreamReader(connection1.getInputStream()));
-
-
- String line1= br1.readLine();
-
-
- while (line1 != null) {
-
-
- System.out.println(new String(line1.getBytes()));
-
-
- line1 = br1.readLine();
-
-
- }
URL url = new URL("網頁");<br />HttpURLConnection connection = (HttpURLConnection) url.openConnection();<br />connection.setDoOutput(true);//允許串連提交資訊<br />connection.setRequestMethod("POST");//網頁提交方式“GET”、“POST”<br />connection.setRequestProperty("User-Agent", "Mozilla/4.7 [en] (Win98; I)");<br />StringBuffer sb = new StringBuffer();<br />sb.append("username=admin");<br />sb.append("&password=admin");<br />OutputStream os = connection.getOutputStream();<br />os.write(sb.toString().getBytes());<br />os.close();</p><p>BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));</p><p>String responseCookie = connection.getHeaderField("Set-Cookie");//取到所用的Cookie<br /> System.out.println("cookie:" + responseCookie);<br />String line = br.readLine();</p><p>while (line != null) {</p><p>System.out.println(new String(line.getBytes()));</p><p>line = br.readLine();//打出登入的網頁</p><p>}<br />//acces<br />URL url1 = new URL("網頁的登入後的頁面");<br />HttpURLConnection connection1 = (HttpURLConnection) url1.openConnection();<br />connection1.setRequestProperty("Cookie", responseCookie);//給伺服器送登入後的cookie<br />BufferedReader br1 = new BufferedReader(new InputStreamReader(connection1.getInputStream()));</p><p>String line1= br1.readLine();</p><p>while (line1 != null) {</p><p>System.out.println(new String(line1.getBytes()));</p><p>line1 = br1.readLine();</p><p>}</p><p>
不過現在很多網站都是用了網頁的Token機制,也就是說每個頁面都會產生一個唯一索引值,而且再加上登入的驗證碼的過程,這樣很多網頁的程式就不能再單純的使用這個網頁登入了,但是這個機制可以讓大家明白怎麼去保持用戶端Session的串連過程。