Android 開發學習記錄(4)---- httpclient使用(三)


之前在Android 開發學習記錄(3)---- httpclient使用(二)中介紹瞭如何使用httpclient訪問需要賬戶登錄的網址,當然首先是要有一個合法的登錄賬戶。

但是現在好多網站在登錄時不僅僅要求你輸入賬號、密碼,還要求你輸入網站隨機產生的一個驗證碼,一般是以圖片形式出現。

這次主要就給自己的筆記裏記下當時我在訪問需要圖片驗證碼時,如何使用 httpclient 的。(當然這裏所說的驗證信息還是需要用戶來手動填寫的,本人菜鳥不會圖像識別、、、、)注:這種方法並不能保證所有的網站都能如此登錄

首先你要知道你要訪問的網址都需要填寫哪些信息,千萬不要僅僅只看網站登錄欄的那些信息,這是不夠的。需要分析你在登錄時到底都發送出那些信息,可以用chrome瀏覽器或者WireShark抓包軟件都是可以做到的。下面就用chrome來演示

首先模擬登陸自己的目標網站(www.你的網址.com),打開“開發者工具”,用自己的賬號密碼登陸網站。這時你會在開發者工具欄中發現這樣一條記錄:


從中可以發現這是一個以POST方式發送給目標網站的信息,點進去可以查看裏面的詳細信息,找到如下信息:


這裏就可以發現,在POST給網址的內容中,表單項不僅僅有 id 與 pw(也就是password)項目,這兩項是用戶手動輸入的賬戶與密碼。還有 authm 和 trust_root 這兩項,這就是隱藏的需要 POST 的表單信息。驗證碼這類的同樣會出現在這塊兒。其中有些數據看起來很隨機,需要從之前GET獲取到的網址中尋找關聯。

此時,以上面截圖爲例,這種帶有隱藏信息的表單填寫如下:

client.getParams().setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BEST_MATCH);
                				
HttpPost request = new HttpPost("http://ssqzfw.xidian.edu.cn/modules/swyh/servlet/login");

List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
                				
/********************header頭設置******************************/
postParameters.add(new BasicNameValuePair("account","XXXXXXXXX"));
postParameters.add(new BasicNameValuePair("password","XXXXXXXXX"));
postParameters.add(new BasicNameValuePair("authm","XXXXXXXXX"));
postParameters.add(new BasicNameValuePair("trust_root","XXXXXXXXX"));
/**************************************************/
                				
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
request.setEntity(formEntity);
HttpResponse response = client.execute(request);
                				
String webInformation_1 = readWeb(response);





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章