锁定老帖子 主题:HTTPClient模拟登陆人人网
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-08
最后修改:2010-04-08
目的:
使用HTTPClient4.0.1登录到人人网,并从特定的网页抓取数据。 总结&注意事项:
代码: 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(); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-04-09
"后一篇会介绍一家比较难搞的网站" 期待你的后一篇~
但是我想说 登入一般都很简单。。能发日志或者 发状态吗?? 还有个问题我想请教下。能登入后 怎么获取所有好友的信息~ |
|
返回顶楼 | |
发表时间:2010-04-09
gstarwd 写道 "后一篇会介绍一家比较难搞的网站" 期待你的后一篇~
但是我想说 登入一般都很简单。。能发日志或者 发状态吗?? 还有个问题我想请教下。能登入后 怎么获取所有好友的信息~ 登录成功后,能发状态,获取头像。这个我用C#写了。c#在win 开发太快了。 |
|
返回顶楼 | |
发表时间:2010-04-09
最后修改:2010-04-09
gstarwd 写道 "后一篇会介绍一家比较难搞的网站" 期待你的后一篇~
但是我想说 登入一般都很简单。。能发日志或者 发状态吗?? 还有个问题我想请教下。能登入后 怎么获取所有好友的信息~ 1 人人网的确属于登录比较简单的,发这个帖子的目的也是希望能提供一个例子给大家拿着就用。因为现在网上的例子大都基于老版本的httpclient,老版本现在已经不维护了。 2 有的网站的登陆过程相对更复杂一些,比如: 认证, 执行js,这样的网站要登陆进去不一定是一件轻松的事情,这个时候只使用httpclient可能就实现不了。 3 发日志,状态,获取好友这些功能一般就是配合正则表达式分析提取网页,比较麻烦的可能就是分析验证码,相对登陆来说,应该是更简单吧。 |
|
返回顶楼 | |
发表时间:2010-04-09
比较感兴趣的是把人人网的大中学校抓取下来。
|
|
返回顶楼 | |
发表时间:2010-04-09
ithero 写道 比较感兴趣的是把人人网的大中学校抓取下来。
HTTPClient是自动管理cookie的,你登陆后,再到含有学校的页面get这些页面,分析一下就可以得到学校列表了。不过不要抓的太频繁,人人会锁账号 |
|
返回顶楼 | |
发表时间:2010-04-09
有意思 前排X入
用过httppaser抓TAOBAO的数据 没用过HTTPclient 周末了 正好学习下 先顶 回去看 |
|
返回顶楼 | |
发表时间:2010-04-09
人人网没有开启验证码机制,开了你这个就不行了!!!
|
|
返回顶楼 | |
发表时间:2010-04-09
最后修改:2010-04-09
kjj 写道 人人网没有开启验证码机制,开了你这个就不行了!!!
人人网的确没有开验证码。不过现在大部分网站的为了提高用户体验,在用户第一次登陆网站时,是不要用户输入验证码的,只有在密码输入错误的情况下,才会要求用户输入验证码,目的是为了防止暴力破解。比如gmail,支付宝,开心001等等,省去了不少麻烦。 |
|
返回顶楼 | |
发表时间:2010-04-09
qiren83 写道 有意思 前排X入
用过httppaser抓TAOBAO的数据 没用过HTTPclient 周末了 正好学习下 先顶 回去看 恩,httppaser没有用过,个人感觉httppaser侧重于分析网页本身,HTTPclient则侧重协议相关的工作。 |
|
返回顶楼 | |