httpClient 保持session




import
org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.cookie.CookiePolicy; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.methods.PostMethod; public class TestLogin { public static void main(String[] args) { // 登陸 Url String loginUrl = "http://139.196.40.80:3000/login"; // 需登陸后訪問的 Url String dataUrl = "http://139.196.40.80:3000/index"; HttpClient httpClient = new HttpClient(); // 模擬登陸,按實際服務器端要求選用 Post 或 Get 請求方式 PostMethod postMethod = new PostMethod(loginUrl); // 設置登陸時要求的信息,用戶名和密碼 NameValuePair[] data = { new NameValuePair("username", "lixiuming"), new NameValuePair("password", "lixiuming") }; postMethod.setRequestBody(data); try { // 設置 HttpClient 接收 Cookie,用與瀏覽器一樣的策略 httpClient.getParams().setCookiePolicy( CookiePolicy.BROWSER_COMPATIBILITY); httpClient.executeMethod(postMethod); // 獲得登陸后的 Cookie Cookie[] cookies = httpClient.getState().getCookies(); StringBuffer tmpcookies = new StringBuffer(); for (Cookie c : cookies) { tmpcookies.append(c.toString() + ";"); } // 進行登陸后的操作1581,1602,1603,1610,1609,1608,1607,1606,1605,1620,1619,1617,1616,1622,1626,1642,1648,1647,1657 GetMethod getMethod = new GetMethod(dataUrl); // 每次訪問需授權的網址時需帶上前面的 cookie 作為通行證 getMethod.setRequestHeader("cookie", tmpcookies.toString()); // 你還可以通過 PostMethod/GetMethod 設置更多的請求后數據 // 例如,referer 從哪里來的,UA 像搜索引擎都會表名自己是誰,無良搜索引擎除外 postMethod.setRequestHeader("Referer", "http://139.196.40.80:3000/index"); postMethod.setRequestHeader("User-Agent", "www Spot"); httpClient.executeMethod(getMethod); // 打印出返回數據,檢驗一下是否成功 String text = getMethod.getResponseBodyAsString(); System.out.println(text); } catch (Exception e) { e.printStackTrace(); } } }

  以上代碼看看就好了,因為httpclient 這個工具使用還是有限的。我還是推薦使用htmlunit,這個工具,個人感覺,對於一般的網站簡直無敵。基本上可以滿足你的所有需求。比如說,你想登入,那么她可以模擬點擊讓你登入,不用考慮所謂的session啊,cookies等等讓人頭疼的問題。比如你需要select。。。她也可以滿足,她通過代碼的方式來操作頁面,還可以執行JavaScript....總之一句話,完美。下面寫個簡單的demo吧。

package test;

import java.io.IOException;
import java.net.MalformedURLException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.junit.Test;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.NicelyResynchronizingAjaxController;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.WebClientOptions;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

public class TestUtil {
    
    @Test
    public void getTVMall(){
        WebClient webClient = new WebClient(BrowserVersion.FIREFOX_52); 
        //webclient參數載體  
        WebClientOptions clientOptions = webClient.getOptions();  
        // 設置webClient的相關參數  
        clientOptions.setJavaScriptEnabled(true);  
        clientOptions.setCssEnabled(false);  
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());  
        clientOptions.setTimeout(35000);  
        clientOptions.setThrowExceptionOnScriptError(false);  
        try {
            HtmlPage htmlPage = webClient.getPage("https://www.tvmao.com/program");//進入電視貓節目單
//            System.out.println(htmlPage.asXml());//這里打印獲取到的整張頁面。
            Document dom = Jsoup.parse(htmlPage.asXml());//若要提取數據,那就解析她。
            Elements ele = dom.getElementsByClass("tdchn");
            for(int i=0;i<ele.size();i++){
                ele.get(i);
                System.out.println(ele.get(i).child(0).text());//獲取所有電視台。。。。這就這樣,當然還可以獲取電視節目。。。。不演示了!
            }
        } catch (FailingHttpStatusCodeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
    
    

}

這里需要的jar包。htmlunit系列jar包(多個),還有Jsoup.jar 。

htmlunit+Jsoup完美。

再來一個相對復雜點的吧,需要模擬點擊的。。。()。

找例子中。。。。

 


免責聲明!

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



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