JAVA--利用HttpClient模擬瀏覽器登陸請求獲取響應的Cookie


在通過java采集網頁數據時,我們常常會遇到這樣的問題:  站點需要登陸才能訪問

而這種網站,一般都會對請求進行賬號密碼的驗證,驗證的方式也有多種,需要具體分析.

今天分析其中的一種情況:  站點對登陸密碼進行動態加密,作為Cookie響應給客戶端,之后的請求需要攜帶加密后的密碼進行訪問

登陸成功的響應頭如下圖:

 

之后的請求頭:

因為每次登陸生成一個新的加密密碼,所以之前的密碼會失效
所以,需要在每次采集之前,先模擬登陸獲取響應的密碼,再作為cookie繼續請求,我們選擇采用HttpClient模擬請求.

我們模擬訪問千瓜數據,代碼如下:

 1 import org.apache.commons.httpclient.HttpClient;
 2 import org.apache.commons.httpclient.NameValuePair;
 3 import org.apache.commons.httpclient.methods.PostMethod;
 4 
 5 @Test
 6     public void testLogin() throws IOException {
 7         //時間戳
 8         long timestamp = new Date().getTime();
 9         //請求地址
10         String url = "http://api.qian-gua.com/login/Login?_=" + timestamp;
11         HttpClient client = new HttpClient();
12         //post請求方式
13         PostMethod postMethod = new PostMethod(url);
14         //推薦的數據存儲方式,類似key-value形式
15         NameValuePair telPair = new NameValuePair();
16         telPair.setName("tel");
17         telPair.setValue("181****0732");
18         NameValuePair pwdPair = new NameValuePair("pwd","a123456");
19         //封裝請求參數
20         postMethod.setRequestBody(new NameValuePair[]{telPair,pwdPair});
21         //這里是設置請求內容為json格式,根據站點的格式決定
22         //因為這個網站會將賬號密碼轉為json格式,所以需要這一步
23         postMethod.setRequestHeader("Content_Type","application/json");
24         //執行請求
25         client.executeMethod(postMethod);
26         //通過Post/GetMethod對象獲取響應頭信息
27         String cookie = postMethod.getResponseHeader("Set-Cookie").getValue();
28         //截取需要的內容
29         String sub = cookie.substring(cookie.indexOf("&"), cookie.lastIndexOf("&"));
30         String[] splitPwd = sub.split("=");
31         String pwd = splitPwd[1];
32         System.out.println(pwd);
33     }                                                    

這樣,就可以在之后的請求中攜帶加密的密碼訪問了

 


免責聲明!

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



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