`
jaychang
  • 浏览: 730334 次
  • 性别: Icon_minigender_1
  • 来自: 嘉兴
社区版块
存档分类
最新评论

HttpClient4.3模拟登录ITEYE

 
阅读更多

 

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

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class HttpClient4ITEYELogin {
    private CloseableHttpClient httpClient = HttpClients.createDefault();

    private String getAuthenticity_token(String html) {
        Document doc = Jsoup.parse(html);
        return doc.select("form#login_form input[name=authenticity_token]")
                .attr("value");
    }

    /**
     * 获取iTeye登录页面
     * 
     * @param url
     * @return
     * @throws IOException
     * @throws ClientProtocolException
     */
    private String getITEyePageContent(String url) throws Exception {
        StringBuffer result = new StringBuffer();

        // 设置请求信息
        HttpGet request = new HttpGet(url);
        request.setHeader("User-Agent",
                "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0");
        request.setHeader("Accept",
                "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        request.setHeader("Accept-Language",
                "zh-CN,zh;q=0.8,en-GB;q=0.6,en;q=0.4,zh-TW;q=0.2");

        // 发送请求
        HttpResponse response = httpClient.execute(request);
        int statusCode = response.getStatusLine().getStatusCode();

        // statusCode==200表示请求成功.
        System.out.println("\nSending 'GET' request to URL : " + url);
        System.out.println("Response Code : " + statusCode);

        // 读取返回内容解析成字符串
        BufferedReader br = new BufferedReader(new InputStreamReader(response
                .getEntity().getContent(), "utf-8"));

        String line = "";
        while ((line = br.readLine()) != null) {
            result.append(line);
        }
        //关闭资源
        br.close();
        return result.toString();
    }

    /**
     * 设置请求头
     * 
     */
    public void setRequestHeader(HttpUriRequest request) {
        request.setHeader("Host", "www.iteye.com");
        request.setHeader("User-Agent",
                "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0");
        request.setHeader("Accept",
                "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        request.setHeader("Accept-Language",
                "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
        request.setHeader("Accept-Encoding", "gzip, deflate");
        request.setHeader("Referer", "http://www.iteye.com/login");
        request.setHeader("Connection", "keep-alive");
    }

    private List<NameValuePair> getParameters(String username, String password)
            throws Exception {
        List<NameValuePair> parameters = new ArrayList<NameValuePair>();
        parameters.add(new BasicNameValuePair("name", username));
        parameters.add(new BasicNameValuePair("password", password));
        parameters
                .add(new BasicNameValuePair(
                        "authenticity_token",
                        getAuthenticity_token(getITEyePageContent("http://www.iteye.com/login"))));
        parameters.add(new BasicNameValuePair("remember_me", "1"));
        return parameters;
    }

    public void login(String url, String username, String password)
            throws Exception {
        HttpPost httpPost = new HttpPost(url);
        setRequestHeader(httpPost);
        // 设置请求参数
        List<NameValuePair> parameters = getParameters(username, password);
        HttpEntity httpEntity = new UrlEncodedFormEntity(parameters);

        System.out.println("send parameters: " + parameters);

        httpPost.setEntity(httpEntity);
        HttpResponse response = httpClient.execute(httpPost);
        // 状态码
        System.out.println("StatesCode:"
                + response.getStatusLine().getStatusCode());
        BufferedReader br = new BufferedReader(new InputStreamReader(response
                .getEntity().getContent(), "utf-8"));
        StringBuffer sb = new StringBuffer();
        while (br.ready()) {
            sb.append(br.readLine());
        }
        // 打印HTML
        System.out.println(sb.toString());
        // 关闭资源
        br.close();
    }

    public static void main(String[] args) throws Exception {
        // 打开cookie
        HttpClient4ITEYELogin httpClient4ITEYELogin = new HttpClient4ITEYELogin();
        httpClient4ITEYELogin.getITEyePageContent("http://www.iteye.com/login");
        httpClient4ITEYELogin.login("http://www.iteye.com/login", "your name",
                "your password");
        //关闭httpClient
        String indexHtml = httpClient4ITEYELogin.getITEyePageContent("http://www.iteye.com/");
        //看看有没有欢迎xxx登录
        System.out.println(indexHtml);
        httpClient4ITEYELogin.httpClient.close();
    }
}

 

 

关键点:首次访问先把authenticity_token取到,这个为input type="hiden"可以通过jsoup取到这个值,这个值会变化,每次关闭浏览器,再重新访问,这个值就会变,没运行一次HttpClient4ITEYELogin这个值也会变

 

 

分享到:
评论

相关推荐

    httpclient4.3工具类

    在这个`httpclient4.3工具类`中,我们看到的是一个自定义的`httpclientUtils`,它是为了满足特定项目需求而编写的,集成了常见的HTTP操作。 HttpClient 4.3主要知识点包括: 1. **连接管理**:HttpClient 4.3引入...

    httpclient4.3 封装工具类

    HttpClient 4.3版本是对该库的一次重要更新,提供了更多的功能和优化。这个封裝工具类是对HttpClient 4.3进行的二次开发,旨在简化HTTP请求的处理,解决一些常见的问题,如代理设置、多线程并发请求、SSL安全连接...

    httpclient4.3.x及其依赖jar包

    《HttpClient 4.3.x详解及其依赖分析》 HttpClient是一个由Apache基金会开发的Java库,主要用于执行HTTP请求。HttpClient 4.3.x是该库的一个重要版本,它提供了丰富的功能和改进,使得开发者能够更方便地与Web...

    HttpClient4.3模拟登陆新版12306

    本篇文章将详细讲解如何利用HttpClient 4.3版本来模拟登录新版12306(中国铁路客户服务中心网站)。 1. **HttpClient介绍** HttpClient是Apache的一个开源项目,它提供了强大的HTTP协议处理能力和灵活的HTTP客户端...

    httpClient4.3 Jar包 demo

    在这个"httpClient4.3 Jar包 demo"中,你将找到HttpClient 4.3的jar文件以及相关的示例代码,对于学习和理解HttpClient的使用非常有帮助。 HttpClient 4.3主要知识点包括: 1. **基础概念**: - **HttpClient对象...

    httpClient4.3官方包

    这个"httpClient4.3官方包"包含了HttpClient 4.3.1版本的所有源代码和必要的文档文件,使得用户可以直接在自己的项目中使用或进行深入学习。 HttpClient 4.3版本引入了许多改进和新特性,如支持最新的HTTP/1.1和...

    HttpClient4.3需要的jar

    HttpClient 4.3是一个重要的版本,它提供了许多改进和新特性,使得开发者可以更高效、更灵活地与Web服务器进行交互。这个压缩包包含了HttpClient 4.3版本所需的jar文件和其他依赖库,以确保能够正确运行基于...

    httpClient4.3

    HttpClient 4.3 版本是该库的一个稳定版本,提供了许多改进和新特性,以增强性能和易用性。 HttpClient 4.3 的核心概念包括: 1. **HttpClient 实例**:这是执行 HTTP 请求的基础。开发者通常会创建一个 ...

    HTTPClient 4.3.X

    描述中提到的链接指向了一个ITEYE博客,虽然内容未给出,但可以推测博主可能分享了关于使用HTTPClient 4.3.X的一些经验,可能包括配置,最佳实践,或者是遇到的问题及解决方案。 标签 "源码" 暗示我们可能会讨论到...

    httpclient 4.3 中文版

    ### HttpClient 4.3 中文版相关知识点 #### 一、概述 Apache HttpClient 是一个用于构建 HTTP 客户端的应用程序编程接口 (API),属于 Apache Jakarta Commons 的一部分。该库支持 HTTP 协议的最新标准,并提供了...

    httpclient-4.3.jar

    《Apache HttpClient 4.3详解》 Apache HttpClient是一款开源的Java库,专为执行HTTP请求而设计,广泛应用于各类Web服务的开发中。其版本4.3是该库的一个重要迭代,提供了诸多改进和新特性,旨在提升性能、稳定性和...

    httpclient4.3所需jar包

    本知识点将详细介绍HTTPClient 4.3在爬虫开发中的应用及其主要组件。 一、HTTPClient 4.3的安装与引入 在Java项目中使用HTTPClient 4.3,首先需要下载相关的jar包。提供的"httpclient43"压缩包应包含所有必需的依赖...

    HttpClient4.3教程共51页.pdf.zip

    HttpClient 4.3版本是一个重要的里程碑,它引入了许多新特性、优化和改进,旨在提高性能,增强稳定性和易用性。这个教程可能是针对开发者设计的,帮助他们深入理解和有效地使用HttpClient 4.3进行网络请求。 ...

    httpclient4.3登陆人人

    标题中的“httpclient4.3登陆人人”指的是使用Apache HttpClient 4.3版本实现对人人网的自动登录功能。HttpClient是一个流行的开源Java库,它允许开发者执行HTTP请求并处理响应,广泛应用于网络爬虫、自动化测试和...

    httpclient4.3 和 httpcore4.4

    HttpClient 4.3是一个重大的更新,它引入了诸多增强功能和性能优化。首先,HttpClient 4.3支持了HTTP/1.1和HTTP/2协议,使开发者可以利用HTTP/2的多路复用(multiplexing)特性,提高并发请求的效率,减少网络延迟。...

    HttpClient 4.3教程.rar

    在HttpClient 4.3版本中,这个库进行了许多改进和优化,使其更适用于复杂的网络通信需求。本教程将详细介绍HttpClient 4.3的主要特性和使用方法。 一、HttpClient简介 HttpClient是一个Java库,它允许开发人员执行...

    httpClient4.3文档 PDF

    HttpClient 4.3是其一个重要的版本,提供了许多新特性和改进,以提升性能和易用性。这个压缩包包含两份文档,一份是.docx格式,一份是.pdf格式,两者内容相同,都是关于HttpClient 4.3的中文版指南。 HttpClient的...

    httpclient4.3中文教程

    HttpClient 4.3 是 Apache 开源组织提供的一个用于构建 HTTP 客户端应用程序的强大库,主要专注于 HTTP 协议的实现。它建立在 HttpCore 库之上,支持传统的阻塞 I/O 模型,适用于各种需要高效、可控的 HTTP 交互的...

    httpclient4.3 封装工具类.zip

    这个压缩包“httpclient4.3 封装工具类.zip”很可能包含了一些预先封装好的工具类,用于简化使用HttpClient进行网络请求的过程。以下是一些关于HttpClient 4.3以及如何封装工具类的关键知识点: 1. **HttpClient ...

    httpclient4.3 设置代理

    javase http通讯技术 apache httpclient4.3 设置代理详解

Global site tag (gtag.js) - Google Analytics