Jsoup模擬登陸例子

jopen 8年前發布 | 17K 次閱讀 Java 網絡爬蟲

Jsoup模擬登陸小例子,不同的網站,需要不同的模擬策略,散仙在這里僅僅作為一個引導學習。

package com.jsouplogin;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

/**
 * 使用Jsoup模擬登陸Iteye
 * 
 * 
 * 大體思路如下:
 * 
 * 第一次請求登陸頁面,獲取頁面信息,包含表單信息,和cookie(這個很重要),拿不到,會模擬登陸不上
 * 
 * 
 * 第二次登陸,設置用戶名,密碼,把第一次的cooking,放進去,即可
 * 
 * 怎么確定是否登陸成功?
 * 
 * 登陸后,打印頁面,會看見歡迎xxx,即可證明
 * 
 * 
 * @date 2014年6月27日
 * @author qindongliang
 * 
 * 
 * **/
public class JsoupLoginIteye {

    public static void main(String[] args)throws Exception {

        JsoupLoginIteye jli=new JsoupLoginIteye();
        jli.login("xxxxx", "xxxxx");//輸入Iteye的用戶名,和密碼

    }
    /**
     * 模擬登陸Iteye
     * 
     * @param userName 用戶名
     * @param pwd 密碼
     * 
     * **/
    public void login(String userName,String pwd)throws Exception{

        //第一次請求
        Connection con=Jsoup.connect("http://www.iteye.com/login");//獲取連接
        con.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");//配置模擬瀏覽器
        Response rs= con.execute();//獲取響應
        Document d1=Jsoup.parse(rs.body());//轉換為Dom樹
        List<Element> et= d1.select("#login_form");//獲取form表單,可以通過查看頁面源碼代碼得知

       //獲取,cooking和表單屬性,下面map存放post時的數據 
       Map<String, String> datas=new HashMap<>();
       for(Element e:et.get(0).getAllElements()){
           if(e.attr("name").equals("name")){
               e.attr("value", userName);//設置用戶名
           }

           if(e.attr("name").equals("password")){
               e.attr("value",pwd); //設置用戶密碼
           }

           if(e.attr("name").length()>0){//排除空值表單屬性
                 datas.put(e.attr("name"), e.attr("value"));  
           }
       }


       /**
        * 第二次請求,post表單數據,以及cookie信息
        * 
        * **/
       Connection con2=Jsoup.connect("http://www.iteye.com/login");
       con2.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");
       //設置cookie和post上面的map數據
       Response login=con2.ignoreContentType(true).method(Method.POST).data(datas).cookies(rs.cookies()).execute();
       //打印,登陸成功后的信息
       System.out.println(login.body());

       //登陸成功后的cookie信息,可以保存到本地,以后登陸時,只需一次登陸即可
       Map<String, String> map=login.cookies();
       for(String s:map.keySet()){
           System.out.println(s+"      "+map.get(s));
       }

    }






}

來自: http://qindongliang1922.iteye.com/blog/2086102

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!