zoukankan      html  css  js  c++  java
  • 爬虫模拟登陆

    package http.login;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.List;
    
    import org.apache.http.Header;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.CookieStore;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.client.protocol.ClientContext;
    import org.apache.http.cookie.Cookie;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.BasicCookieStore;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.impl.cookie.BasicClientCookie;
    import org.apache.http.protocol.BasicHttpContext;
    import org.apache.http.protocol.HttpContext;
    import org.junit.Test;
    
    public class LoginTest2 {
    
        private static CookieStore cs = new BasicCookieStore();
    
        @Test
        public void test1() throws Exception {
            DefaultHttpClient httpclient = new DefaultHttpClient();
    
            // 创建一个本地上下文信息
            HttpContext localContext = new BasicHttpContext();
            // 在本地上下问中绑定一个本地存储
            localContext.setAttribute(ClientContext.COOKIE_STORE, cs);
    
            // 目标地址
            HttpPost httppost = new HttpPost(
                    "http://localhost:8080/app/login");
    
            System.out.println("请求: " + httppost.getRequestLine());
            // 构造最简单的字符串数据
            StringEntity reqEntity = new StringEntity(
                    "username=admin&password=admin");
            // 设置类型
            reqEntity.setContentType("application/x-www-form-urlencoded");
            // 设置请求的数据
            httppost.setEntity(reqEntity);
            // 执行
            HttpResponse response = httpclient.execute(httppost);
    
            Header[] headers = response.getAllHeaders();
            for (Header h : headers) {
                String name = h.getName();
                String value = h.getValue();
                System.out.println("header : " + h.getName() + ":" + h.getValue());
    
                if ("Set-Cookie".equalsIgnoreCase(name)) {
                    String[] strs = value.split(";");
                    for (String str : strs) {
                        String[] cookies = str.split("=");
                        System.out.println("=============== : " + cookies[0] + ":"
                                + cookies[1]);
                        cs.addCookie(new BasicClientCookie(cookies[0], cookies[1]));
                    }
                }
    
            }
    
            HttpEntity entity = response.getEntity();
            System.out.println("----------------------------------------");
            System.out.println(response.getStatusLine());
            if (entity != null) {
                System.out.println("Response content length: "
                        + entity.getContentLength());
    
            }
    
            // 显示结果
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    entity.getContent(), "UTF-8"));
            String line = null;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
    
            opera();
        }
    
        private void opera() throws Exception {
    
            System.out.println("----------------------------------------");
            System.out.println("----------------------------------------");
    
            String logPath = http://localhost:8080/app/log;
    
            DefaultHttpClient httpclient = new DefaultHttpClient();
    
            String cookieStr = "";
            List<Cookie> list = cs.getCookies();
            for (Cookie cookie : list) {
                cookieStr += cookie.getName() + "=" + cookie.getValue() + ";";
            }
    
            // 目标地址
            HttpGet httpget = new HttpGet(logPath);
            httpget.setHeader("Cookie", cookieStr);
    
            System.out.println("请求: " + httpget.getRequestLine());
            // 设置类型
            // 执行
            HttpResponse response = httpclient.execute(httpget);
            HttpEntity entity = response.getEntity();
    
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    entity.getContent(), "UTF-8"));
            String line = null;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
    
        }
    }
    工程配置包参考:
    http://files.cnblogs.com/alex-blog/pom.xml
     

    本文参考:

    http://topmanopensource.iteye.com/blog/821954(还有一些没有记录下来)

    http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/index.html

  • 相关阅读:
    CSS团队协作规范
    百度前端学院-基础学院-第四课
    百度前端学院-基础学院-第三课
    百度前端学院-基础学院-第二课
    vue(三)-父子组件通信
    setTimeout()与clearTimeout()
    vue(二)-父子组件语法
    vue(一)使用vue-cli搭建项目
    CSS table-layout 属性
    git学习
  • 原文地址:https://www.cnblogs.com/fillim/p/4181950.html
Copyright © 2011-2022 走看看