1. 程式人生 > >Jsoup系列學習(1)-傳送get或post請求

Jsoup系列學習(1)-傳送get或post請求

原文地址


簡介

jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文字內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和操作資料。

官網:http://www.open-open.com/jsoup/parsing-a-document.htm

1、jsoup的主要功能如下:

1. 從一個URL,檔案或字串中解析HTML; 2. 使用DOM或CSS選擇器來查詢、取出資料; 3. 可操作HTML元素、屬性、文字; jsoup是基於MIT協議釋出的,可放心使用於商業專案。

2、jsoup包

1.所使用到的jar包:jsoup-*.jar
        <!-- jsoup包依賴 -->
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.8.3</version>
        </dependency>

get請求

1、jsoup模擬get請求還是很簡單的,這裡使用它,目的就是來做介面自動化測試,程式碼既簡潔又簡單。 引數中有cookie的目的就是適合所有cookie請求,請求中有cookie的傳入cookie值,沒有的傳入空值即可。 複製程式碼
    public static String httpGet(String url,String cookie) throws IOException{
        //獲取請求連線
        Connection con = Jsoup.connect(url);
        //請求頭設定,特別是cookie設定
        con.header("Accept", "text/html, application/xhtml+xml, */*"); 
        con.header("Content-Type", "application/x-www-form-urlencoded");
        con.header(
"User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0))"); con.header("Cookie", cookie); //解析請求結果 Document doc=con.get(); //獲取標題 System.out.println(doc.title());
     //返回內容
return doc.toString(); }
複製程式碼

 2、其中get請求引數中,還可以通過另一種方式:

        //獲取請求連線
        Connection conn = Jsoup.connect("http://www.cnblogs.com/zhangfei/p/");
        //請求引數設定
        conn.data("page","3");
        //獲取請求結果
        Document doc = conn.get();       

 3、在傳送請求中,我們不光只想獲取響應內容,還想獲取頭資訊或者cookie值,例如:在登陸中,我們獲取登陸cookie值,那麼我們可以在以後一定時間內傳送請求,帶上cookie值,就可以繞過登陸,不用重新登陸。

要取得cookies,必須要有個Response的物件,所以,要用execute方法,如果直接用post方面,返回的則是Document物件,但在用execute方法時,要事先呼叫一下method方法設定好請求方式即可。

獲取get請求後指定標頭檔案名稱的值方法:

複製程式碼
public static String httpGetHeader(String url,String cook,String header) throws IOException{
        //獲取請求連線
        Connection con = Jsoup.connect(url);
        //請求頭設定,特別是cookie設定
        con.header("Accept", "text/html, application/xhtml+xml, */*"); 
        con.header("Content-Type", "application/x-www-form-urlencoded");
        con.header("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0))"); 
        con.header("Cookie", cook);
        //傳送請求
        Response resp=con.method(Method.GET).execute();        
        //獲取cookie名稱為__bsi的值
        String cookieValue = resp.cookie("__bsi");
        System.out.println("cookie  __bsi值:  "+cookieValue);
        //獲取返回cookie所值
        Map<String,String> cookies = resp.cookies();
        System.out.println("所有cookie值:  "+cookies);
        //獲取返回標頭檔案值
        String headerValue = resp.header(header);
        System.out.println("標頭檔案"+header+"的值:"+headerValue);
        //獲取所有標頭檔案值
        Map<String,String> headersOne =resp.headers();
        System.out.println("所有標頭檔案值:"+headersOne);
        return headerValue; 
        
    }
複製程式碼

post請求

1、使用jsoup模擬post請求返回body:

複製程式碼
public static String httpPost(String url,Map<String,String> map,String cookie) throws IOException{
        //獲取請求連線
        Connection con = Jsoup.connect(url);
        //遍歷生成引數
        if(map!=null){
            for (Entry<String, String> entry : map.entrySet()) {     
               //新增引數
                con.data(entry.getKey(), entry.getValue());
               } 
        }
        //插入cookie(標頭檔案形式)
        con.header("Cookie", cookie);
        Document doc = con.post();  
        System.out.println(doc);
        return doc.toString();
    }
複製程式碼

 2、傳送post請求獲取cookie值獲取headers與get類似:

        //傳送請求
        Response resp=con.method(Method.POST).execute();        
        //獲取cookie名稱為__bsi的值
        String cookieValue = resp.cookie(header);
        System.out.println(cookieValue);

 2、原始碼連結

連結:http://files.cnblogs.com/files/airsen/JsoupUtil.rar

參考

1、jsoup實現爬蟲網路:http://blog.csdn.net/column/details/jsoup.html

2、Jsoup做介面測試:http://www.cnblogs.com/zhangfei/p/4359408.html