用Java模擬網站登錄


本文為原創,轉載請聲明來源和作者,謝謝!

作者:_cha1R

  

  如何用Java代碼模擬一些如百度、QQ之類的網站登錄?有兩個方式,一是發送模擬請求,二是模擬瀏覽器操作,而這兩種方式恰好在Java有開源實現,在這里介紹一個工具包,它是家喻戶曉的HttpClient

  HttpClient 是 Apache Jakarta Common 下的子項目,至於它是干什么用的呢?簡單來說就是:它像瀏覽器一樣支持HTTP協議。既然支持HTTP協議,那意味着瀏覽器能發送的,它也能發送。我想大家都知道登陸的代碼流程,大部分無非就是瀏覽器端以POST方式提交一個form表單,服務器端收到請求后,判斷賬戶密碼做相應處理並且返回結果給瀏覽器端。但是服務器端並不知道是什么給它發送一個請求,它只針對請求作出相應回應。那么我們就可以利用HttpClient模擬以POST請求方式發送一個表單,不過在這之前,先導入相關的Jar包。

  commons-codec-1.3.jar
  commons-httpclient-3.1.jar
  commons-logging-1.1.1.
  這三個jar是httpclient必須的jar包,當然你的版本號可以是其他的。

  導入完以后,模擬一個HTML表單提交的過程:

  首先要構建一個HttpClient,這個HttpClient就像一個瀏覽器,可以用來發送請求。

  

HttpClient client = new DefaultHttpClient(); //構建一個Client

 

  假設百度的登陸服務器的地址為http://login.baidu.com/,接下來是構建一個POST請求

HttpPost post = new HttpPost("http://login.baidu.com/");//構建一個POST請求
//構建表單參數
List<NameValuePair> formParams = new ArrayList<NameValuePair>();
formParams.add(new BasicNameValuePair("username", "yourname"));
formParams.add(new BasicNameValuePair("password", "yourpassword"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8");//將表單參數轉化為“實體”
post.setEntity(entity);//將“實體“設置到POST請求里

  現在有POST請求,有表單,有參數 ,那下一步就是提交請求到服務器了

HttpResponse response = client.execute(post);//提交POST請求

  這樣就已經完整的模擬了一個瀏覽器發送POST請求到服務器。大家注意client.execute()完后,會返回一個HttpResponse.利用這個HttpResponse,我們可以獲取到很多東西,如響應頭,響應內容,響應Cookie,狀態碼,返回的輸入流等等。下面代碼是打印響應的內容:

HttpEntity result = response.getEntity();//拿到返回的HttpResponse的"實體"
String content = EntityUtils.toString(result);;//用httpcore.jar提供的工具類將"實體"轉化為字符串打印到控制台
System.out.println(content);

  我們可以根據HttpResponse返回的狀態碼、內容等來判斷我們是否已經成功登陸百度:

if(content.contains("登陸成功")){
  System.out.println("登陸成功!!!");
}

 

  附上完整代碼以便大家測試:

try {
  HttpClient client = new DefaultHttpClient();                //構建一個Client
  HttpPost post = new HttpPost("http://login.baidu.com/");    //構建一個POST請求
  //構建表單參數
  List<NameValuePair> formParams = new ArrayList<NameValuePair>();
  formParams.add(new BasicNameValuePair("username", "yourname"));
  formParams.add(new BasicNameValuePair("password", "yourpassword"));
  UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formParams, "UTF-8");//將表單參數轉化為“實體”
  post.setEntity(entity);        //將“實體“設置到POST請求里
            
  HttpResponse response = client.execute(post);//提交POST請求
  HttpEntity result = response.getEntity();//拿到返回的HttpResponse的"實體"
  String content = EntityUtils.toString(result);;            //用httpcore.jar提供的工具類將"實體"轉化為字符串打印到控制台
  System.out.println(content);
  if(content.contains("登陸成功")){
    System.out.println("登陸成功!!!");
  }
} catch (Exception e) {
  e.printStackTrace();
}

 

  HttpClient可以做的還有很多,這只是初步的一個應用。

  更多學習資料

 


免責聲明!

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



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