java.net模拟用户登录网页并维持session的方法

有的时候,会需要使用java的程序访问网页,正常的访问网页的程序很多,也没有什么可讲的,在这里主要说明一下如何使用java的访问网页时,需要登录时,如何保持登录的程序。

先简单讲解一下原理:实际上网页和服务器是两套应用,客户端访问服务器一次,实际上网页获取后,连接立即就断了,这样的话,说明服务器是不会保持长效连接的,但是在现实情况登录的话,客户端好像一直在保留连接,那么这种情况就和先前模式似乎不同;当然不是,断开连接是整个B/S架构的根本原理所在,因此怎么去保持这些连接,实际上就是利用Cookie,访问网页时,每次网页的服务器会产生一个Cookie,记录当前网页的一个键值,如果使用登录了后,服务器端的Session就会和客户端的一个Cookie产生连接,这样每次给这个页面发送客户端的Cookie所记录的Session的标识,即可完成登录的模拟。
代码如下:

[java] view plain copy print ?
  1. URL url = new URL("网页"); 
  2. HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
  3. connection.setDoOutput(true);//允许连接提交信息 
  4. connection.setRequestMethod("POST");//网页提交方式“GET”、“POST” 
  5. connection.setRequestProperty("User-Agent", "Mozilla/4.7 [en] (Win98; I)"); 
  6. StringBuffer sb = new StringBuffer(); 
  7. sb.append("username=admin"); 
  8. sb.append("&password=admin"); 
  9. OutputStream os = connection.getOutputStream(); 
  10. os.write(sb.toString().getBytes()); 
  11. os.close(); 
  12.  
  13.  
  14. BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
  15.  
  16.  
  17.  
  18.  
  19. String responseCookie = connection.getHeaderField("Set-Cookie");//取到所用的Cookie 
  20.            System.out.println("cookie:" + responseCookie); 
  21. String line = br.readLine(); 
  22.  
  23.  
  24. while (line != null) { 
  25.  
  26.  
  27. System.out.println(new String(line.getBytes())); 
  28.  
  29.  
  30. line = br.readLine();//打出登录的网页 
  31.  
  32.  
  33. //acces 
  34. URL url1 = new URL("网页的登录后的页面"); 
  35. HttpURLConnection connection1 = (HttpURLConnection) url1.openConnection(); 
  36. connection1.setRequestProperty("Cookie", responseCookie);//给服务器送登录后的cookie 
  37. BufferedReader br1 = new BufferedReader(new InputStreamReader(connection1.getInputStream())); 
  38.  
  39.  
  40. String line1= br1.readLine(); 
  41.  
  42.  
  43. while (line1 != null) { 
  44.  
  45.  
  46. System.out.println(new String(line1.getBytes())); 
  47.  
  48.  
  49. line1 = br1.readLine(); 
  50.  
  51.  
<textarea style="display: none;" class="java" cols="50" rows="15" name="code">URL url = new URL(&quot;网页&quot;); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoOutput(true);//允许连接提交信息 connection.setRequestMethod(&quot;POST&quot;);//网页提交方式“GET”、“POST” connection.setRequestProperty(&quot;User-Agent&quot;, &quot;Mozilla/4.7 [en] (Win98; I)&quot;); StringBuffer sb = new StringBuffer(); sb.append(&quot;username=admin&quot;); sb.append(&quot;&amp;password=admin&quot;); OutputStream os = connection.getOutputStream(); os.write(sb.toString().getBytes()); os.close(); BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); String responseCookie = connection.getHeaderField(&quot;Set-Cookie&quot;);//取到所用的Cookie System.out.println(&quot;cookie:&quot; + responseCookie); String line = br.readLine(); while (line != null) { System.out.println(new String(line.getBytes())); line = br.readLine();//打出登录的网页 } //acces URL url1 = new URL(&quot;网页的登录后的页面&quot;); HttpURLConnection connection1 = (HttpURLConnection) url1.openConnection(); connection1.setRequestProperty(&quot;Cookie&quot;, 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(); } </textarea>
不过现在很多网站都是用了网页的Token机制,也就是说每个页面都会产生一个唯一键值,而且再加上登录的验证码的过程,这样很多网页的程序就不能再单纯的使用这个网页登录了,但是这个机制可以让大家明白怎么去保持客户端Session的连接过程。

你可能感兴趣的:(java,session,服务器,url,cookie)