`
357029540
  • 浏览: 737149 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

利用HttpClient自动登陆ITEYE

    博客分类:
  • JAVA
阅读更多

          我利用的是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);
   }
}

 

分享到:
评论

相关推荐

    使用HTMLPARSER和HTTPCLIENT制作网络爬虫,附赠相关技术文档。

    总的来说,HTMLPARSER和HTTPCLIENT是构建网络爬虫的重要工具,它们可以帮助开发者高效地抓取和解析网页数据,从而实现自动化的信息收集和分析。通过不断学习和实践,你可以掌握更多网络爬虫的技巧,应对更复杂的网页...

    2015-9 httpclientdemo 2017.3.15 --谷歌浏览器插件【重要】

    这个库广泛应用于各种场景,如网页抓取、服务端自动化测试、API调用等。在这个"2015-9 httpclientdemo 2017.3.15"的资源中,我们很可能是看到一个基于HttpClient的示例项目,可能包含了如何使用HttpClient进行HTTP...

    org.apache.http使用

    在实际应用中,Apache HttpClient可以用于各种场景,如Web服务调用、爬虫项目、自动化测试等。博客可能涵盖这些场景的具体实现,包括设置请求头、处理HTTP状态码、处理响应实体、异常处理等。同时,它可能还会涉及...

    使用apache httpcomponents 模拟html表单上传文件

    这篇博客文章(链接:https://eof.iteye.com/blog/2153595)可能详细介绍了如何利用Apache HttpClient实现这个功能。 Apache HttpClient 提供了 `HttpClient` 类,它是执行HTTP请求的核心组件。为了模拟HTML表单...

    上传及查看图片

    在IT行业中,文件上传和查看是常见的功能,特别是在web应用和桌面应用中。...在WinForms环境中,我们可以利用.NET Framework提供的工具和控件,有效地实现批量上传图片至指定目录,并在应用内查看这些图片。

    朋友想爬一个网站的软文,俺顺便做个视频,分享下

    在创建网络爬虫时,Groovy可以利用其与Java的互操作性,利用如Jsoup或Apache HttpClient等库来解析HTML和发送HTTP请求。 描述中提到的“NULL 博文链接:https://key232323.iteye.com/blog/705134”表明完整的教程或...

    Java编写Baidu关键词工具

    2. **网络编程**:使用Java的HttpURLConnection或者HttpClient类进行网络请求,获取百度关键词的相关数据。 3. **JSON处理**:由于网络返回的数据通常是JSON格式,所以会用到Gson或Jackson等库来解析和构建Java对象...

    针对商品信息抽取-雏形程序-java语言

    9. **爬虫框架**:可能利用如Scrapy这样的框架,简化开发流程,提高开发效率。 通过这个项目,开发者可以学习到如何构建一个完整的网络爬虫系统,从设计到实现,再到优化,对提升Java编程能力以及数据处理技能非常...

    httpcomponents 学习

    描述中的链接指向了博主ihuning在iteye博客上的一篇具体文章,虽然描述部分是空的,但我们可以推测这篇文章可能详细介绍了作者在学习和使用HTTPComponents过程中的一些经验和心得,可能涵盖了如何设置请求、处理响应...

    网页抓取例子

    网页抓取,也被称为网络爬虫或数据抓取,是一种自动化技术,用于从互联网上提取大量数据。在本例中,我们关注的标题是“网页抓取例子”,这表明我们将探讨如何实现一个简单的网页抓取程序。描述部分虽然为空,但我们...

    基于FREEMARKER模板的数据采集系统

    开发者可以利用FreeMarker的强大功能,自定义模板来满足特定的数据展示需求,同时,数据采集部分则负责从各种来源获取信息,两者协同工作,构建出能够自动化处理和呈现数据的系统。如果想要深入了解这个系统,阅读...

    基于Htmlparser的天气预报程序

    这种技术在数据抓取和自动化信息处理中非常常见,尤其适用于没有提供API接口或者接口有限制的网站。 【描述】提到的"博文链接:https://ideasforjava.iteye.com/blog/641342"可能是一个详细的教程或示例代码分享,...

    一些常用的jar包

    标题中的“一些常用的jar包”指的是Java开发中经常使用的外部库文件,它们包含了预编译的Java类和资源,使得开发者无需从零开始编写所有代码,可以便捷地利用已有的功能模块。这些jar包通常包含了各种框架、工具库...

Global site tag (gtag.js) - Google Analytics