目的:
使用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();
}
}

转自: http://robblog.iteye.com/blog/638206

HTTPClient模拟登陆人人网相关推荐

  1. python3模拟登陆人人网(requests)

    前言 之前看别人一直模拟登陆人人网,我就想人人网有头有脸的咋那么好模拟登陆进去呢,,今天看了下发现真的超级容易登陆,可能人人太老了也好久不更新了吧.人人网一点防护措施都没有,没有验证码,没有加密,没有 ...

  2. PythonScript_003_通过Cookie模拟登陆人人网

    #!/usr/bin/env python # -*- coding:utf-8 -*-import urllib.request import http.cookiejar # 相当于Python2 ...

  3. 使用HttpClient模拟登陆并爬取网页

    在使用Java进行网页爬虫时经常需要携带登陆的 Cookie 信息,然而 Cookie 是有时效性的,所以经常会碰到 Cookie 失效的情况.如何在 Cookie 失效后自动重新获取成了爬虫急需解决 ...

  4. HttpClient模拟登陆

    HttpClient模拟登陆 httpclient登录新浪微博(非SDK方式) 分享此文章 苦逼的折腾了快一星期,总算把新浪微博rsa加密登录折腾ok了,这里需要注意的是httpclient最好用4. ...

  5. Python之 使用session类模拟登陆人人网

    使用request模块的session类模拟登陆人人网 因为人人网的登陆不需要验证码,故模拟登陆比较简单. 思路 1. 使用浏览器打开人人网的登陆页面 2. 找出登陆时发送post请求的url地址和请 ...

  6. python 模拟登陆人人网,并发文字状态

    这几天一直在学习用python 爬取网页, 今天试着写了一个小程序, 模拟登陆 人人网,并且提供了发送文字状态的函数.在登录的时候,已经可以处理有验证码的 情况 ,就拿来练手吧. (在处理字符串的部分 ...

  7. httpclient模拟登陆微博问题

    我用httpclient模拟登陆微博报如下错误: [DEBUG] RequestAddCookies - Cookie [version: 0][name: USRHAWB][value: usrmd ...

  8. Java--使用httpClient模拟登陆正方教务系统获取课表

    最近形如课程格子与超表课程表应用如雨后春笋般涌现,他们自动获取课程表是怎么实现的呢.于是我用Java实现了一下模拟登陆正方教务系统获取课表的过程. 首先,我们先了解一下网站登录的原理:当我们输入学号, ...

  9. 使用Httpclient模拟登陆正方软件股份有限公司开发的教务管理系统

    事先声明,我写这篇,只是为了分享一下,登录网站不止有使用cookies这一种方法,还有一种使用随机码的方法,并没有泄露"商业机密"的想法,本人才疏学浅,只是在站在巨人的肩膀上,摘到 ...

最新文章

  1. mysql的delete的底层实现_MySQL索引的底层实现
  2. 转png格式_CAD转PNG,你知道怎样转换成高质量清晰的黑白图片吗?
  3. VS配置本地IIS以域名访问
  4. Django之Mode的外键自关联和引用未定义的Model
  5. 软件系统中的颗粒度_意式浓缩咖啡丨甘醇香浓余韵长,研磨的度与质千万别忽视...
  6. TransH:将知识嵌入到超平面(知识图谱嵌入)2014 AAAI
  7. 知乎 2019 新知青年大会开幕,用问题改变世界的方向
  8. jenkins 控制台输出中文乱码
  9. angular学习资源
  10. 【网络架构理论系列】简述分布式的定义、分类、技术发展历史进程
  11. 面试官又问我Select * 为什么效率低下?
  12. 《洛神赋》髣髴兮若轻云之蔽月,飘飖兮若流风之回雪
  13. Xshell远程连接服务器上的jupyter notebook
  14. 差分隐私基础知识-上
  15. 信息收集的方法有哪些
  16. 获取网络图片或本地图片的长宽的方法
  17. 【游戏面包屑】简单的导航栏设计
  18. 不应将商业行为政治化!
  19. siliconc8051f Silicon C8051F编程器使用出错解决办法
  20. React Native关于使用CameraRoll出现的问题@react-native-camera-roll/camera-roll@react-native-community/cameraro

热门文章

  1. 如何设置弧度 html,JavaScript中弧度和角度的转换
  2. 综述(九)线控系统的分类,及自动驾驶中常见的线控系统所起到的作用
  3. string头文件与cstring头文件
  4. 栈和队列能熟练使用么?怎么存储矩阵呢?(更少的引用,更多的思考)
  5. chown:修改用户的所属用户和所属组方法
  6. 华为云空间官网登录方法
  7. 十款优质企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少开发工作,让您只关注业务!)
  8. 项目运行指标:micrometer自定义metrics
  9. 中国MRI市场预测与投资战略研究报告(2022版)
  10. python珠穆朗玛峰问题_day04Python练习