Jsoup模拟登陆例子

Jsoup模拟登陆小例子,不同的网站,需要不同的模拟策略,散仙在这里仅仅作为一个引导学习。 

Java代码  收藏代码
    1. package com.jsouplogin;  
    2.   
    3. import java.util.HashMap;  
    4. import java.util.List;  
    5. import java.util.Map;  
    6.   
    7. import org.jsoup.Connection;  
    8. import org.jsoup.Jsoup;  
    9. import org.jsoup.Connection.Method;  
    10. import org.jsoup.Connection.Response;  
    11. import org.jsoup.nodes.Document;  
    12. import org.jsoup.nodes.Element;  
    13.   
    14. /** 
    15.  * 使用Jsoup模拟登陆Iteye 
    16.  *  
    17.  *  
    18.  * 大体思路如下: 
    19.  *  
    20.  * 第一次请求登陆页面,获取页面信息,包含表单信息,和cookie(这个很重要),拿不到,会模拟登陆不上 
    21.  *  
    22.  *  
    23.  * 第二次登陆,设置用户名,密码,把第一次的cooking,放进去,即可 
    24.  *  
    25.  * 怎么确定是否登陆成功? 
    26.  *  
    27.  * 登陆后,打印页面,会看见欢迎xxx,即可证明 
    28.  *  
    29.  *  
    30.  * @date 2014年6月27日 
    31.  * @author qindongliang 
    32.  *  
    33.  *  
    34.  * **/  
    35. public class JsoupLoginIteye {  
    36.       
    37.     public static void main(String[] args)throws Exception {  
    38.           
    39.         JsoupLoginIteye jli=new JsoupLoginIteye();  
    40.         jli.login("xxxxx", "xxxxx");//输入Iteye的用户名,和密码  
    41.           
    42.     }  
    43.     /** 
    44.      * 模拟登陆Iteye 
    45.      *  
    46.      * @param userName 用户名 
    47.      * @param pwd 密码 
    48.      *  
    49.      * **/  
    50.     public void login(String userName,String pwd)throws Exception{  
    51.           
    52.         //第一次请求  
    53.         Connection con=Jsoup.connect("http://www.iteye.com/login");//获取连接  
    54.         con.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");//配置模拟浏览器  
    55.         Response rs= con.execute();//获取响应  
    56.         Document d1=Jsoup.parse(rs.body());//转换为Dom树  
    57.         List<Element> et= d1.select("#login_form");//获取form表单,可以通过查看页面源码代码得知  
    58.           
    59.        //获取,cooking和表单属性,下面map存放post时的数据   
    60.        Map<String, String> datas=new HashMap<>();  
    61.        for(Element e:et.get(0).getAllElements()){  
    62.            if(e.attr("name").equals("name")){  
    63.                e.attr("value", userName);//设置用户名  
    64.            }  
    65.              
    66.            if(e.attr("name").equals("password")){  
    67.                e.attr("value",pwd); //设置用户密码  
    68.            }  
    69.              
    70.            if(e.attr("name").length()>0){//排除空值表单属性  
    71.                  datas.put(e.attr("name"), e.attr("value"));    
    72.            }  
    73.        }  
    74.           
    75.          
    76.        /** 
    77.         * 第二次请求,post表单数据,以及cookie信息 
    78.         *  
    79.         * **/  
    80.        Connection con2=Jsoup.connect("http://www.iteye.com/login");  
    81.        con2.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");  
    82.        //设置cookie和post上面的map数据  
    83.        Response login=con2.ignoreContentType(true).method(Method.POST).data(datas).cookies(rs.cookies()).execute();  
    84.        //打印,登陆成功后的信息  
    85.        System.out.println(login.body());  
    86.          
    87.        //登陆成功后的cookie信息,可以保存到本地,以后登陆时,只需一次登陆即可  
    88.        Map<String, String> map=login.cookies();  
    89.        for(String s:map.keySet()){  
    90.            System.out.println(s+"      "+map.get(s));  
    91.        }  
    92.       
    93.     }  
    94.       
    95.       
    96.       
    97.   
    98.       
    99.       
    100. }  
posted @ 2015-11-12 20:30  zfswff  阅读(312)  评论(0编辑  收藏  举报