zoukankan      html  css  js  c++  java
  • java模拟登陆博客园

    原理很简单,就是向登录页面发起一个http的request,然后获得cookies,再向想要访问的博客园页面发起request请求,在请求中携带cookie。

    使用了commons-codec-1.4.jar , commons-httpclient-3.1.jar ,commons-logging-1.0.3.jar 三个外部包。下面是全部代码

    import org.apache.commons.httpclient.Cookie;
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.NameValuePair;
    import org.apache.commons.httpclient.cookie.CookiePolicy;
    import org.apache.commons.httpclient.methods.GetMethod;
    import org.apache.commons.httpclient.methods.PostMethod;
    
    public class HttpClientLogin {
        public static void main(String[] args){
            //登陆 Url
            String loginUrl = "http://passport.cnblogs.com/login.aspx";
     
            //需登陆后访问的 Url
            String dataUrl = "http://home.cnblogs.com/";
     
            HttpClient httpClient = new HttpClient();
     
            //模拟登陆,按实际服务器端要求选用 Post 或 Get 请求方式
            PostMethod postMethod = new PostMethod(loginUrl);
     
            //设置登陆时要求的信息,一般就用户名和密码,验证码自己处理了
            NameValuePair[] data = {
                    new NameValuePair("__VIEWSTATE", "/wEPDwULLTE1MzYzODg2NzZkGAEFHl9fQ29udHJvbHNSZXF1aXJlUG9zdEJhY2tLZXlfXxYBBQtjaGtSZW1lbWJlcm1QYDyKKI9af4b67Mzq2xFaL9Bt"),
                    new NameValuePair("__EVENTVALIDATION", "/wEdAAUyDI6H/s9f+ZALqNAA4PyUhI6Xi65hwcQ8/QoQCF8JIahXufbhIqPmwKf992GTkd0wq1PKp6+/1yNGng6H71Uxop4oRunf14dz2Zt2+QKDEIYpifFQj3yQiLk3eeHVQqcjiaAP"),
                    new NameValuePair("tbUserName", "yourusername"),
                    new NameValuePair("tbPassword", "yourpassword"),
                    new NameValuePair("txtReturnUrl", "http://home.cnblogs.com/"),
                    new NameValuePair("btnLogin", "登  录")
            };
            postMethod.setRequestBody(data);
     
            try {
                //设置 HttpClient 接收 Cookie,用与浏览器一样的策略
                httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
                httpClient.executeMethod(postMethod);
     
                //获得登陆后的 Cookie
                Cookie[] cookies=httpClient.getState().getCookies();
                System.out.println(cookies);
                System.out.println("============================================================================");
                String tmpcookies= "";
                for(Cookie c:cookies){
                    tmpcookies += c.toString()+";";
                }
                System.out.println(tmpcookies);
                //进行登陆后的操作
                GetMethod getMethod = new GetMethod(dataUrl);
     
                //每次访问需授权的网址时需带上前面的 cookie 作为通行证
                getMethod.setRequestHeader("cookie",tmpcookies);
     
                //标明来自哪里的链接,以及UA
                postMethod.setRequestHeader("Referer", "http://unmi.cc");
                postMethod.setRequestHeader("User-Agent","Unmi Spot");
     
                httpClient.executeMethod(getMethod);
     
                //打印出返回数据,检验一下是否成功
                String text = getMethod.getResponseBodyAsString();
                System.out.println(text);
     
            } catch (Exception e) {
                e.printStackTrace();
            }   
        }
    }
  • 相关阅读:
    Linux磁盘管理之创建磁盘分区05
    Linux磁盘管理之设备文件详解04
    Linux命令行上传文件到百度网盘
    Linux磁盘管理之元数据、文件和目录、链接文件03
    std..tr1如何传递引用类型给function
    如何判断一个点是否在矩形之内及C++的操作符重载
    C++11中部分新语法说明
    物理引擎中基于AABB碰撞盒的SAP碰撞检测
    c++动态库中对于字符类型变量的格式化处理
    从tr1中function使用看converting constructor
  • 原文地址:https://www.cnblogs.com/kongkongyzt/p/3345347.html
Copyright © 2011-2022 走看看