`
robertliudeqiang
  • 浏览: 123123 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

HTTPClient模拟登陆人人网

    博客分类:
  • web
阅读更多
目的:
使用HTTPClient4.0.1登录到人人网,并从特定的网页抓取数据。


总结&注意事项:

  • HttpClient(DefaultHttpClient)代表了一个会话,在同一个会话中,HttpClient对cookie自动进行管理(当然,也可以在程序中进行控制)。
  • 在同一个会话中,当使用post或是get发起一个新的请求时,一般需要对调用前一个会话的abort()方法,否则会抛出异常。
  • 有些网站登录成功后会重定向(302, 303),比如这里的人人网。如果发出的是post请求,需要从响应头中取出location,并再次向网站发送请求,以获取最终数据。
  • 抓取程序不要运行地过于频繁,大部分站点都有抵制刷网站机制。人人网访问过于频繁会锁账号。
  • 使用录制工具录制出登录时向网站发出的请求参数。在这里,我使用了badboy,导出成jmeter文件,在jmeter中就可以看到登录时向网站发送的参数列表和相应的值。
  • 人人网属于登陆流程比较简单的网站,后一篇会介绍一家比较难搞的网站。

代码:
public class RenRen {
    // The configuration items
    private static String userName = "YourMailinRenren";
    private static String password = "YourPassword";
    private static String redirectURL = "http://blog.renren.com/blog/304317577/449470467";

    // Don't change the following URL
    private static String renRenLoginURL = "http://www.renren.com/PLogin.do";

    // The HttpClient is used in one session
    private HttpResponse response;
    private DefaultHttpClient httpclient = new DefaultHttpClient();

    private boolean login() {
        HttpPost httpost = new HttpPost(renRenLoginURL);
        // All the parameters post to the web site
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        nvps.add(new BasicNameValuePair("origURL", redirectURL));
        nvps.add(new BasicNameValuePair("domain", "renren.com"));
        nvps.add(new BasicNameValuePair("isplogin", "true"));
        nvps.add(new BasicNameValuePair("formName", ""));
        nvps.add(new BasicNameValuePair("method", ""));
        nvps.add(new BasicNameValuePair("submit", "登录"));
        nvps.add(new BasicNameValuePair("email", userName));
        nvps.add(new BasicNameValuePair("password", password));
        try {
            httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
            response = httpclient.execute(httpost);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            httpost.abort();
        }
        return true;
    }

    private String getRedirectLocation() {
        Header locationHeader = response.getFirstHeader("Location");
        if (locationHeader == null) {
            return null;
        }
        return locationHeader.getValue();
    }

    private String getText(String redirectLocation) {
        HttpGet httpget = new HttpGet(redirectLocation);
        // Create a response handler
        ResponseHandler<String> responseHandler = new BasicResponseHandler();
        String responseBody = "";
        try {
            responseBody = httpclient.execute(httpget, responseHandler);
        } catch (Exception e) {
            e.printStackTrace();
            responseBody = null;
        } finally {
            httpget.abort();
            httpclient.getConnectionManager().shutdown();
        }
        return responseBody;
    }

    public void printText() {
        if (login()) {
            String redirectLocation = getRedirectLocation();
            if (redirectLocation != null) {
                System.out.println(getText(redirectLocation));
            }
        }
    }

    public static void main(String[] args) {
        RenRen renRen = new RenRen();
        renRen.printText();
    }
}
分享到:
评论
45 楼 zxflb 2010-07-07  
httpclient是个好东西 学习了
44 楼 heqishan 2010-06-22  
楼主。。。代码注释呢???
看的我好辛苦啊,边看代码边查API。。。
43 楼 aaronbamboo 2010-05-13  
个人感觉不能因为没有抛出异常就认为登录成功了。按照人人网的设计,应该有重定向到某一个地址,则登录成功;如果用户密码错误,返回的应该也是200(成功),应该加以区别。
42 楼 piper 2010-05-10  
还有,http client自动管理cookie是什么意思,能否有相关解释的连接?谢谢!
41 楼 piper 2010-05-10  
java的web方面是个新手,针对楼主代码有几个问题,

1.redirectURL 到底是什么作用,为啥是blog地址?在使用过程中是否需要自己替换?

2. getText()的abort可以理解,为什么login()也要执行abort?

还望楼主耐心解答,十分感谢!
40 楼 unbounder 2010-05-07  
呵呵,用老版本的httpclient做过这事,常常搭配htmlparser一起做,方便抓数据。
39 楼 rentianchou 2010-05-06  
ithero 写道
比较感兴趣的是把人人网的大中学校抓取下来。

恩  我也是这么想的
38 楼 ct455332 2010-05-05  
cluries 写道
呵呵
这个我以前做同步twitter到人人的时候也做过

请问你是如何获取一个网页需要发送的东西呢?我是个新手。如果前辈可以的话。能把之前更新twitter到人人的代码发给我么?
37 楼 cluries 2010-05-05  
呵呵
这个我以前做同步twitter到人人的时候也做过
36 楼 yava555 2010-05-02  
感觉最麻烦的,还是页面解析,不知道有没有好的方式?

我之前都是用正则表达式

知道了个htmlcleaner,不知道满足需求吧,以后学习一下。
35 楼 yava555 2010-05-02  
感觉HttpClient做这个有点庞大,自己简单对HttpURLConnection简单封装一下比较好。
我就是这么做的,用起来很方便。

HttpBot:http://hijava.googlecode.com/svn/HttpBot
34 楼 ct455332 2010-05-01  
抱歉。import部分我自己完成了。发现你这个很好用啊。

但我仿造你这个做的一个登陆3g.renren.com却实现不了。苦恼
33 楼 ct455332 2010-05-01  
请问一下 前辈可以把import部分加上吗?我这学期才学java。真好自己估摸着在利用java做个程序帮我收取小号中的农场。。还有貌似我搜索过后发现。4.0后的httpclient和3.0之前的包完全不一样啊
32 楼 h330894169 2010-05-01  
楼主你好...我目前还没看懂你的代码。清写上注解好吗。这样能让我们都看懂..谢谢了
31 楼 art2008 2010-04-22  
大哥,想问你一下,用httpclient4,post请求方式,怎么发送xml格式的数据呀,就是中国移动那样的
30 楼 robertliudeqiang 2010-04-14  
xiaoyiz 写道
robertliudeqiang 写道
qiren83 写道
有意思 前排X入

用过httppaser抓TAOBAO的数据 没用过HTTPclient 周末了 正好学习下

先顶 回去看


恩,httppaser没有用过,个人感觉httppaser侧重于分析网页本身,HTTPclient则侧重协议相关的工作。

使用httpclient模拟登陆后,可以接着用htmlcleaner解析抓取么?(必须登录才能进入的网页中抓取)


完全可以,其实我上次就想说这个意思。
29 楼 xiaoyiz 2010-04-14  
robertliudeqiang 写道
qiren83 写道
有意思 前排X入

用过httppaser抓TAOBAO的数据 没用过HTTPclient 周末了 正好学习下

先顶 回去看


恩,httppaser没有用过,个人感觉httppaser侧重于分析网页本身,HTTPclient则侧重协议相关的工作。

使用httpclient模拟登陆后,可以接着用htmlcleaner解析抓取么?(必须登录才能进入的网页中抓取)
28 楼 hf_abcd 2010-04-13  
非常感谢您发了此贴,相见恨晚哪!我搞了很久(旧版的HttpClient 3.1)连个简单的都没搞定啊...
27 楼 yin_bp 2010-04-11  
老于头,呵呵,问个好啊
26 楼 robertliudeqiang 2010-04-10  
lzj0470 写道
自动管理cookie,有点不太可靠。建议还是要加上。我做过一个娱乐赌球的网站,有验证码,有Cookie,我曾以为httpclient可以帮我搞定cookie,最后还是每跟踪一步都需要set一下cookie。如果不设置一下,到时候会搞死人。都不知道哪里错误。


谢谢提醒。感觉可能是httpclient的bug吧,不过httpclient这个工具维护的还不错,有可能已经修复这个问题了。

相关推荐

    httpclient4.3登陆人人

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

    Jsoup+httpclient模拟登陆和抓取页面.pdf

    Jsoup+httpclient模拟登陆和抓取页面.pdf

    java httpclient 模拟登录

    在"java httpclient 模拟登录"这个场景下,我们通常会用到HttpClient来模拟用户登录网站的过程,获取登录后的session信息,以便后续能够访问登录后才能看到的页面内容。以下将详细介绍如何使用Java HttpClient进行...

    HttpClient模拟登陆

    在阅读博文《HttpClient模拟登陆》时,可以深入学习如何解决这些具体问题,并查看示例代码以获得更详细的实现细节。 标签“源码”意味着你需要关注底层的工作原理,而“工具”标签则暗示HttpClient作为一个实用工具...

    HttpClient模拟登陆方正系统

    在本文中,我们将深入探讨如何使用HttpClient来模拟登录方正系统,以及在此基础上开发类似“课程格子”这样的应用。 一、HttpClient简介 HttpClient是一个支持HTTP协议的客户端编程工具,支持HTTP/1.1及其后续版本...

    httpclient模拟登录实例

    本篇文章将详细讲解如何使用HttpClient进行模拟登录操作,结合源码分析,帮助开发者深入理解其工作原理。 HttpClient库由Apache基金会开发,提供了全面的HTTP协议支持,包括标准与扩展的HTTP方法、连接管理、重试...

    Jsoup+httpclient 模拟登陆和抓取

    Jsoup+httpclient 模拟登录和抓取知识点: 1. Jsoup库使用介绍: - Jsoup是一个Java的HTML解析器,能够直接解析HTML文档,提供类似于jQuery的操作方法。 - 主要功能包括从URL、文件或字符串中解析HTML,使用DOM或...

    httpclient模拟登陆

    ### HTTPClient 模拟登录详解 #### 一、概述 HTTPClient是Apache组织下的一个开源项目,它提供了功能丰富的HTTP客户端开发工具包,可以用来发送HTTP请求并接收响应。利用HTTPClient,我们可以轻松实现模拟登录的...

    httpclient4之百度模拟登陆,回复与58同城自动登陆

    本主题将深入探讨如何使用HttpClient4库进行百度和58同城的模拟登陆操作。HttpClient4是一个强大的Java库,它提供了丰富的功能来执行HTTP请求,非常适合进行网页交互。 首先,我们来了解HttpClient4的基本用法。...

    HttpClient模拟登录实例

    在本实例中,我们将探讨如何使用HttpClient库来模拟登录网站,获取用户信息,以及处理带有验证码的登录场景。 首先,我们需要理解HttpClient的基本使用。HttpClient的核心类包括HttpClient本身,HttpGet、HttpPost...

    httpclient4 微信公众账号模拟登陆

    httpclient4 微信公众账号模拟登陆,网络上看到的,觉得不错上传出来,供大家一起共同分享学习。

    HttpClient模拟登陆源码 pjYzm.zip

    工程里的入口类为:mnLogin.java ,由于模拟登陆的网站,使用了自签名的SSL证书,所以新增两个方法,创建HttpClient不校验服务端证书,后台通过调用登陆接口,获得返回的cookie信息,在使用登陆成功获得cookie,调取...

    新浪,腾讯微博HttpClient4模拟登陆

    本文将深入探讨如何使用Java中的HttpClient4库来实现对新浪和腾讯微博的模拟登录。HttpClient4是一个强大的HTTP客户端库,它允许开发者执行HTTP请求并处理响应,非常适合进行网页交互。 首先,我们来看`Sina.java`...

    httpclient 模拟登陆代码和jar包

    在这个场景下,我们关注的是如何使用`HttpClient`进行模拟登录。 模拟登录通常是开发自动化测试、爬虫或集成服务时必要的步骤,它允许程序模仿用户在网页上的登录行为。以下是一份使用`HttpClient`进行模拟登录的...

    C# 使用HttpClient模拟请求的案例

    情景描述 将一个时间转换为对应的unix时间戳, ... ...除此之外,我们对请求添加签名的校验,key设置为X-Sign 接口定义 /// /// 获取时间戳(毫秒). .../// &lt;param name=dateTime&gt;&lt;/param&gt; /// &lt;returns&gt;&lt;/returns&gt; ...

    HttpClient模拟http浏览器请求

    这个库广泛应用于Web服务调用、API接口测试以及自动化脚本中,因为它可以模拟浏览器的行为,进行GET、POST等复杂的HTTP请求。 在Java编程中,HttpClient提供了一个强大的API,允许我们创建自定义的HTTP请求,设置...

    HttpClient模拟http发送post和get请求

    HttpClient模拟http发送post和get请求

    java实现模拟登录网站最全的资料

    7. **论坛资源**:`ITeye论坛.mht`文件可能包含了关于HttpClient的使用讨论,如`HTTPClient模拟登陆人人网`,这通常提供了实际项目中的示例和遇到的问题解决方案。 8. **MHT文件**:MHT是一种单一文件的网页存档...

    java 模拟登陆人人网

    在本文中,我们将深入探讨如何使用Java进行网页模拟登录,以人人网为例。模拟登录是一项常见的网络编程任务,常用于自动化测试、数据抓取或数据分析等场景。在Java中,我们可以利用HTTP客户端库如HttpURLConnection...

    HttpClient4.3模拟登陆新版12306

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

Global site tag (gtag.js) - Google Analytics