1. 程式人生 > 實用技巧 >用Java模擬瀏覽器操作

用Java模擬瀏覽器操作

  1 packagesky.dong.test;
  2 
  3 importjava.io.BufferedReader;
  4 importjava.io.InputStreamReader;
  5 importorg.apache.commons.httpclient.Cookie;
  6 importorg.apache.commons.httpclient.Header;
  7 importorg.apache.commons.httpclient.HttpClient;
  8 importorg.apache.commons.httpclient.NameValuePair;
9 importorg.apache.commons.httpclient.cookie.CookiePolicy; 10 importorg.apache.commons.httpclient.methods.PostMethod; 11 importorg.apache.commons.httpclient.params.HttpMethodParams; 12 13 publicclassHttpLoginTest{ 14 15 publicstaticvoidmain(String[]args){ 16 Stringurl= 17 "http://discuzdemo.c88.53dns.com/logging.php?action=login&loginsubmit=yes&floatlogin=yes";//
論壇的登陸頁面 18 Stringurl2= 19 "http://discuzdemo.c88.53dns.com/post.php?infloat=yes&action=newthread&fid=2&extra=&topicsubmit=yes&inajax=1";//論壇的發貼頁面 20 HttpClienthttpClient=newHttpClient(); 21 //httpClient.getHostConfiguration().setProxy("222.247.62.195",8080); 22 httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
23 PostMethodpostMethod=newPostMethod(url); 24 PostMethodpostMethod2=newPostMethod(url2); 25 NameValuePair[]data={ 26 newNameValuePair("username","123"), 27 newNameValuePair("referer","http://discuzdemo.c88.53dns.com/index.php"), 28 newNameValuePair("password","123"), 29 newNameValuePair("loginfield","username"), 30 newNameValuePair("questionid","0"), 31 newNameValuePair("formhash","fc922ca7"), 32 }; 33 postMethod.setRequestHeader( 34 "Referer", 35 "http://discuzdemo.c88.53dns.com/index.php" 36 ); 37 postMethod.setRequestHeader("Host","discuzdemo.c88.53dns.com"); 38 //postMethod.setRequestHeader("Connection","keep-alive"); 39 //postMethod.setRequestHeader("Cookie","jbu_oldtopics=D123D; 40 //jbu_fid2=1249912623;smile=1D1;jbu_onlineusernum=2; 41 //jbu_sid=amveZM"); 42 postMethod.setRequestHeader( 43 "User-Agent", 44 "Mozilla/5.0(Windows;U;WindowsNT5.1;zh-CN;rv:1.9.1.2)Gecko/20090729Firefox/3.5.2" 45 ); 46 postMethod.setRequestHeader( 47 "Accept", 48 "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" 49 ); 50 //postMethod.setRequestHeader("Accept-Encoding","gzip,deflate"); 51 //postMethod.setRequestHeader("Accept-Language","zh-cn"); 52 //postMethod.setRequestHeader("Accept-Charset", 53 //"GB2312,utf-8;q=0.7,*;q=0.7"); 54 postMethod.setRequestBody(data); 55 try{ 56 httpClient.executeMethod(postMethod); 57 StringBufferresponse=newStringBuffer(); 58 BufferedReaderreader=newBufferedReader( 59 newInputStreamReader(postMethod.getResponseBodyAsStream(),"gb2312") 60 );//以gb2312編碼方式列印從伺服器端返回的請求 61 Stringline; 62 while((line=reader.readLine())!=null){ 63 response.append(line).append(System.getProperty("line.separator")); 64 } 65 reader.close(); 66 Headerheader=postMethod.getResponseHeader("Set-Cookie"); 67 Cookie[]cookies=httpClient.getState().getCookies();//取出登陸成功後,伺服器返回的cookies資訊,裡面儲存了伺服器端給的“臨時證” 68 Stringtmpcookies=""; 69 for(Cookiec:cookies){ 70 tmpcookies=tmpcookies+c.toString()+";"; 71 System.out.println(c); 72 } 73 System.out.println(tmpcookies); 74 //System.out.println(header.getValue()); 75 System.out.println(response); 76 NameValuePair[]data2={ 77 newNameValuePair("subject","測試自動發貼"), 78 newNameValuePair("message","能否發貼成功呢?測試一下就知道了"), 79 newNameValuePair("updateswfattach","0"), 80 newNameValuePair("wysiwyg","0"), 81 newNameValuePair("checkbox","0"), 82 newNameValuePair("handlekey","newthread"), 83 newNameValuePair("formhash","885493ec"), 84 }; 85 postMethod2.setRequestHeader("cookie",tmpcookies);//將“臨時證明”放入下一次的發貼請求操作中 86 postMethod2 87 .getParams() 88 .setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET,"gbk");//因為發貼時候有中文,設定一下請求編碼 89 postMethod2.setRequestHeader( 90 "Referer", 91 "http://discuzdemo.c88.53dns.com/forumdisplay.php?fid=4" 92 ); 93 postMethod2.setRequestHeader("Host","discuzdemo.c88.53dns.com"); 94 //postMethod.setRequestHeader("Connection","keep-alive"); 95 //postMethod.setRequestHeader("Cookie","jbu_oldtopics=D123D; 96 //jbu_fid2=1249912623;smile=1D1;jbu_onlineusernum=2; 97 //jbu_sid=amveZM"); 98 postMethod2.setRequestHeader( 99 "User-Agent", 100 "Mozilla/5.0(Windows;U;WindowsNT5.1;zh-CN;rv:1.9.1.2)Gecko/20090729Firefox/3.5.2" 101 ); 102 postMethod2.setRequestHeader( 103 "Accept", 104 "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" 105 );//以上操作是模擬瀏覽器的操作,使用伺服器混淆 106 postMethod2.setRequestBody(data2); 107 httpClient.executeMethod(postMethod2); 108 StringBufferresponse1=newStringBuffer(); 109 BufferedReaderreader1=newBufferedReader( 110 newInputStreamReader(postMethod2.getResponseBodyAsStream(),"gb2312") 111 ); 112 Stringline1; 113 while((line1=reader1.readLine())!=null){ 114 response1.append(line1).append(System.getProperty("line.separator")); 115 } 116 reader1.close(); 117 System.out.println(response1); 118 }catch(Exceptione){ 119 System.out.println(e.getMessage()); 120 //TODO:handleexception 121 }finally{ 122 postMethod.releaseConnection(); 123 postMethod2.releaseConnection(); 124 } 125 } 126 }