欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

利用HttpClient自动登陆ITEYE

程序员文章站 2022-07-13 13:49:33
...

          我利用的是4.5.2的jar包,可以在官网上下载,下载地址为http://hc.apache.org/downloads.cgi,我这里主要实现了登陆的主页的代码,如果需要登陆到博客之类的就自己更换连接的地址。我这里使用的是SpringBoot的进行测试的。

   SpringBoot的实现代码为

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>testImport</groupId>
    <artifactId>testImport</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.3.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

 Java的代码部分为

package com;

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.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.cookie.BasicClientCookie;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by Administrator on 2016/5/11.
 */
@RestController
@EnableAutoConfiguration
@ComponentScan
@SpringBootApplication
public class TestImport {

    @RequestMapping
    public String getHello(){
        return "hello";
    }

    @RequestMapping(value = "/testLogin")
    public String testLogin(){
        CloseableHttpClient client = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String html = "";
        try {
            //可以使用谷歌浏览器的F12查看登陆的时候需要那些信息
            //首先到登陆的界面进行登陆
            HttpPost httpPost = new HttpPost("http://www.iteye.com/login");
            httpPost.addHeader("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
            httpPost.addHeader("Accept-Encoding","gzip, deflate, sdch");
            httpPost.addHeader("Accept-Language","h-CN,zh;q=0.8");
            httpPost.addHeader("Host","www.iteye.com");
            httpPost.addHeader("Proxy-Connection","keep-alive");
            httpPost.addHeader("Upgrade-Insecure-Requests","1");
            httpPost.addHeader("Referer","http://www.iteye.com/login");
            //使用的是谷歌浏览器登陆
            httpPost.addHeader("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.87 Safari/537.36");
            httpPost.addHeader("Cookie","_javaeye_cookie_id_=1466393515330269; __utmt=1; _javaeye3_session_=BAh7CDoQX2NzcmZfdG9rZW4iMVo1SlVaOEhrTTdia0w3Tm40MDJqY3BtbHhVd25lU1lPTDI5MGZVdDFLMVk9OhFvcmlnaW5hbF91cmkiGmh0dHA6Ly93d3cuaXRleWUuY29tLzoPc2Vzc2lvbl9pZCIlMjU0YzJiMDgwYjRiZjg4YzI0YmJlNmFhYWFhYzdmNjA%3D--6e802374f064e10c59fccc0af2965c29472e77e9; __utma=191637234.388365526.1466393674.1466393674.1466393674.1; __utmb=191637234.3.10.1466393674; __utmc=191637234; __utmz=191637234.1466393674.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); dc_tos=o91wpp; dc_session_id=1466393821804");
            httpPost.addHeader("Cache-Control","max-age=0");
            //httpPost.addHeader("Content-Length","143");
            httpPost.addHeader("Origin","http://www.iteye.com");
            httpPost.addHeader("Content-Type","application/x-www-form-urlencoded");
            List formParams = new ArrayList();
            formParams.add(new BasicNameValuePair("name","*****"));
            formParams.add(new BasicNameValuePair("password","*******"));
            formParams.add(new BasicNameValuePair("authenticity_token","Z5JUZ8HkM7bkL7Nn402jcpmlxUwneSYOL290fUt1K1Y="));
            formParams.add(new BasicNameValuePair("button","登 录"));
            UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(formParams,"UTF-8");
            httpPost.setEntity(urlEncodedFormEntity);
            CookieStore cookieStore = new BasicCookieStore();
            ResponseHandler responseHandler = new BasicResponseHandler();
            //String res = client.execute(httpPost,responseHandler,httpClientContext).toString();
            response = client.execute(httpPost);
            //进行缓存
            if(response != null){
                for(Header header :response.getAllHeaders()){
                    //if("Set-Cookie".equals(header.getName())){
                    Cookie cookie = new BasicClientCookie(header.getName(),header.getValue());
                    cookieStore.addCookie(cookie);
                    //}
                }
            }
            HttpClientContext httpClientContext = HttpClientContext.create();
            httpClientContext.setCookieStore(cookieStore);
            // 设置需要登陆的到那个页面
            String loginPage = "http://www.iteye.com";
            HttpGet httpget = new HttpGet(loginPage);
            if(response != null){
                //缓存
                for(Header header :response.getAllHeaders()){
                    if("Set-Cookie".equals(header.getName())){
                        httpget.setHeader(header);
                    }
                }
            }
            HttpResponse httpResponse = client.execute(httpget);
            // 必须是同一个HttpClient
            HttpEntity entity = httpResponse.getEntity();
            html = EntityUtils.toString(entity, "GBK");
            System.out.println(html);
            httpget.releaseConnection();
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                response.close();
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return html;
    }



   public static void main(String [] args){
       SpringApplication.run(TestImport.class);
   }
}