所有需要传递的参数结合fiddler和网页源代码分析,关于给好友留言里面ak这个参数,不确定每个人是否一样,words这个变量就是requestToken。代码参考http://liubey.javaeye.com/,在他的基础上实现取到所有好友,访问所有好友页面。import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.http.Header; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.ResponseHandler; 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.impl.client.BasicResponseHandler; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; /*** 利用httpclient操作人人网 比如登陆,发状态,模拟你访问任何人主页等等* 代码参考http://liubey.javaeye.com/,在他的基础上实现取到所有好友,访问所有好友页面,words这个变量就是requestToken* @author Chen Chun*/ public class RenRenStatus3 {// 人人网账号private String userName = "";// 人人网密码private String password = "";// 实时更改的字串private String words = "";private static String redirectURL = "http://www.renren.com/home";// Don't change the following URLprivate static String renRenLoginURL = "http://www.renren.com/PLogin.do";// The HttpClient is used in one sessionprivate HttpResponse response;private DefaultHttpClient httpclient = null;public RenRenStatus3(String userName, String password, String words) {this.userName = userName;this.password = password;this.words = words;}/*** 登陆* @return*/public boolean login() {if (httpclient != null) {System.out.println("登陆成功");return true;}httpclient = null;httpclient = new DefaultHttpClient();HttpPost httpost = new HttpPost(renRenLoginURL);// All the parameters post to the web siteList<NameValuePair> nvps = new ArrayList<NameValuePair>();nvps.add(new BasicNameValuePair("origURL", redirectURL));nvps.add(new BasicNameValuePair("domain", "renren.com"));nvps.add(new BasicNameValuePair("autoLogin", "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();} String redirectLocation = getRedirectLocation();if (redirectLocation != null) {// System.out.println(getText(redirectLocation));// 跳到首页,现在登录完成getText(redirectLocation);}System.out.println(redirectLocation);return true;}public String getRedirectLocation() {Header locationHeader = response.getFirstHeader("Location");if (locationHeader == null) {return null;}return locationHeader.getValue();}public String getText(String redirectLocation) {HttpGet httpget = new HttpGet(redirectLocation);// Create a response handlerResponseHandler<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;}/*** 更新本人状态* @return*/public boolean update(String status) {if (login()) {HttpPost post = new HttpPost("http://status.renren.com/doing/update.do?");List<NameValuePair> cp = new ArrayList<NameValuePair>();cp.add(new BasicNameValuePair("c", status));cp.add(new BasicNameValuePair("isAtHome", "1"));cp.add(new BasicNameValuePair("publisher_form_ticket",words));cp.add(new BasicNameValuePair("raw", status));cp.add(new BasicNameValuePair("requestToken", words));cp.add(new BasicNameValuePair("statusPage", "1"));try {post.setEntity(new UrlEncodedFormEntity(cp, HTTP.UTF_8));response = httpclient.execute(post); System.out.println(response.getStatusLine());} catch (Exception e) {e.printStackTrace();return false;} finally {post.abort();}return true;}return false;}/*** 发表本人日志 * @return*/public boolean writeBlog(String title,String content) {if (login()) {HttpPost post = new HttpPost("http://blog.renren.com/blog/0/addBlog");List<NameValuePair> cp = new ArrayList<NameValuePair>();cp.add(new BasicNameValuePair("title", title));cp.add(new BasicNameValuePair("body", content));cp.add(new BasicNameValuePair("categoryId","0"));cp.add(new BasicNameValuePair("blogControl", "99"));cp.add(new BasicNameValuePair("editBlogControl","99"));cp.add(new BasicNameValuePair("postFormId", words)); cp.add(new BasicNameValuePair("isVip","false"));cp.add(new BasicNameValuePair("jf_vip_em", "-true")); cp.add(new BasicNameValuePair("requestToken", words));try {post.setEntity(new UrlEncodedFormEntity(cp, HTTP.UTF_8));response = httpclient.execute(post);System.out.println(response.getStatusLine());} catch (Exception e) {e.printStackTrace();return false;} finally {post.abort();}return true;}return false;}/*** 访问* @param id* @return*/public boolean visit(int id) {HttpPost post = new HttpPost("http://www.renren.com/profile.do?portal=profileFootprint&ref=profile_footprint&id=" + id);try {response = httpclient.execute(post);} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}System.out.println("访问成功!id号:" + id);post.abort();return true;}/*** 给好友留言,可以无限刷 * @param 好友ID,留言内容message * @return*/public boolean lveMsgToAFriend(int id,String message) {if (login()) {HttpPost post = new HttpPost("http://gossip.renren.com/gossip.do");List<NameValuePair> cp = new ArrayList<NameValuePair>();cp.add(new BasicNameValuePair("body", message));cp.add(new BasicNameValuePair("curpage", ""));cp.add(new BasicNameValuePair("from", "main"));cp.add(new BasicNameValuePair("id",""+id));cp.add(new BasicNameValuePair("cc", ""+id));cp.add(new BasicNameValuePair("ak","9b04ac2c405e00923df2664d5d512422")); //??cp.add(new BasicNameValuePair("cccc", ""));cp.add(new BasicNameValuePair("tsc", ""));cp.add(new BasicNameValuePair("headUrl", ""));cp.add(new BasicNameValuePair("largeUrl", ""));cp.add(new BasicNameValuePair("profilever", "2008")); cp.add(new BasicNameValuePair("requestToken", words));cp.add(new BasicNameValuePair("only_to_me", "0"));cp.add(new BasicNameValuePair("color", ""));cp.add(new BasicNameValuePair("ref", "http://www.renren.com/profile.do&mode=&requestToken="+words));try {post.setEntity(new UrlEncodedFormEntity(cp, HTTP.UTF_8));response = httpclient.execute(post);System.out.println(response.getStatusLine());} catch (Exception e) {e.printStackTrace();return false;} finally {post.abort();}return true;}return false;}/*** 取到你所有的好友ID * @return 好友id list*/public List<String> getFriends() {List<String> friends = new ArrayList<String>();if (login()) {HttpGet get = new HttpGet("http://friend.renren.com/myfriendlistx.do");ResponseHandler<String> responseHandler = new BasicResponseHandler();try { String friendPage = httpclient.execute(get,responseHandler);Pattern pattern = Pattern.compile("var friends=(.*);");Matcher matcher = pattern.matcher(friendPage);if(matcher.find()){ String str = matcher.group(1); // System.out.println("friends info: "+ str); Pattern p = Pattern.compile("/"id/":([1-9][0-9]{0,9})");Matcher m = p.matcher(str);while(m.find()){friends.add(m.group(1));}return friends;} } catch (Exception e) {e.printStackTrace();} finally {get.abort();}}return null; } /*** @param args* @throws InterruptedException */public static void main(String[] args) throws InterruptedException {RenRenStatus3 lw = new RenRenStatus3("username", "password", "words");lw.login();List<String> friends = lw.getFriends();for(int i=0;i<friends.size() && i<5;i++){int id = Integer.parseInt(friends.get(i));System.out.println("id="+id);lw.visit(id);lw.lveMsgToAFriend(id, "踩");} /* for(int i=0;i<25;i++){lw.lveMsgToAFriend(260231042, "踩踩踩"+i);Thread.sleep(1000); } */ }}

requesttoken 不用搞了,直接登陆之后在页面用正则表达式搞到,看下面的代码:

/** Copyright (c) 2010-2011 * All rights reserved.* */
package sns;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
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.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;/*** 利用httpclient操作人人网 比如登陆,发状态,模拟你访问任何人主页等等* * @author chenchun* @created 2012-4-18* * @version 1.0*/
public class Renren {// 人人网账号private String userName = "";// 人人网密码private String password = "";// 实时更改的字串private String requestToken;private static String redirectURL = "http://www.renren.com/home";private static String renRenLoginURL = "http://www.renren.com/PLogin.do";// The HttpClient is used in one sessionprivate HttpResponse response;private DefaultHttpClient httpclient = null;public Renren(String userName, String password) {this.userName = userName;this.password = password;}/*** 登陆* * @return*/public boolean login() {if (httpclient != null) {System.out.println("登陆成功");return true;}httpclient = null;httpclient = new DefaultHttpClient();HttpPost httpost = new HttpPost(renRenLoginURL);// All the parameters post to the web siteList<NameValuePair> nvps = new ArrayList<NameValuePair>();nvps.add(new BasicNameValuePair("origURL", redirectURL));nvps.add(new BasicNameValuePair("domain", "renren.com"));nvps.add(new BasicNameValuePair("autoLogin", "true"));nvps.add(new BasicNameValuePair("key_id", "1"));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();}String redirectLocation = getRedirectLocation();if (redirectLocation != null) {requestToken = getRequestToken(getText(redirectLocation));}return true;}public String getRedirectLocation() {Header locationHeader = response.getFirstHeader("Location");if (locationHeader == null) {return null;}return locationHeader.getValue();}public String getText(String redirectLocation) {HttpGet httpget = new HttpGet(redirectLocation);// Create a response handlerResponseHandler<String> responseHandler = new BasicResponseHandler();String responseBody = "";try {responseBody = httpclient.execute(httpget, responseHandler);} catch (Exception e) {e.printStackTrace();responseBody = null;} finally {httpget.abort();}return responseBody;}/*** 更新本人状态* * @return*/public boolean update(String status) {if (login()) {HttpPost post = new HttpPost("http://status.renren.com/doing/update.do?");List<NameValuePair> cp = new ArrayList<NameValuePair>();cp.add(new BasicNameValuePair("c", status));cp.add(new BasicNameValuePair("isAtHome", "1"));cp.add(new BasicNameValuePair("publisher_form_ticket", requestToken));cp.add(new BasicNameValuePair("raw", status));cp.add(new BasicNameValuePair("requestToken", requestToken));cp.add(new BasicNameValuePair("statusPage", "1"));try {post.setEntity(new UrlEncodedFormEntity(cp, HTTP.UTF_8));response = httpclient.execute(post);System.out.println(response.getStatusLine());} catch (Exception e) {e.printStackTrace();return false;} finally {post.abort();}return true;}return false;}/*** 发表本人日志* * @return*/public boolean writeBlog(String title, String content) {if (login()) {HttpPost post = new HttpPost("http://blog.renren.com/blog/0/addBlog");List<NameValuePair> cp = new ArrayList<NameValuePair>();cp.add(new BasicNameValuePair("title", title));cp.add(new BasicNameValuePair("body", content));cp.add(new BasicNameValuePair("categoryId", "0"));cp.add(new BasicNameValuePair("blogControl", "99"));cp.add(new BasicNameValuePair("editBlogControl", "99"));cp.add(new BasicNameValuePair("postFormId", requestToken));cp.add(new BasicNameValuePair("isVip", "false"));cp.add(new BasicNameValuePair("jf_vip_em", "-true"));cp.add(new BasicNameValuePair("requestToken", requestToken));try {post.setEntity(new UrlEncodedFormEntity(cp, HTTP.UTF_8));response = httpclient.execute(post);System.out.println(response.getStatusLine());} catch (Exception e) {e.printStackTrace();return false;} finally {post.abort();}return true;}return false;}/*** 访问* * @param id* @return*/public boolean visit(int id) {HttpPost post = new HttpPost("http://www.renren.com/" + id);try {response = httpclient.execute(post);} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}System.out.println("访问成功!id号:" + id);post.abort();return true;}/*** 给好友留言,可以无限刷* * @param 好友ID*            ,留言内容message* @return*/public boolean lveMsgToAFriend(int id, String message) {if (login()) {HttpPost post = new HttpPost("http://gossip.renren.com/gossip.do");List<NameValuePair> cp = new ArrayList<NameValuePair>();cp.add(new BasicNameValuePair("body", message));cp.add(new BasicNameValuePair("curpage", ""));cp.add(new BasicNameValuePair("from", "main"));cp.add(new BasicNameValuePair("id", "" + id));cp.add(new BasicNameValuePair("cc", "" + id));cp.add(new BasicNameValuePair("ak", "9b04ac2c405e00923df2664d5d512422")); // ??cp.add(new BasicNameValuePair("cccc", ""));cp.add(new BasicNameValuePair("tsc", ""));cp.add(new BasicNameValuePair("headUrl", ""));cp.add(new BasicNameValuePair("largeUrl", ""));cp.add(new BasicNameValuePair("profilever", "2008"));cp.add(new BasicNameValuePair("requestToken", requestToken));cp.add(new BasicNameValuePair("only_to_me", "0"));cp.add(new BasicNameValuePair("color", ""));cp.add(new BasicNameValuePair("ref","http://www.renren.com/profile.do&mode=&requestToken=" + requestToken));try {post.setEntity(new UrlEncodedFormEntity(cp, HTTP.UTF_8));response = httpclient.execute(post);System.out.println(response.getStatusLine());} catch (Exception e) {e.printStackTrace();return false;} finally {post.abort();}return true;}return false;}/*** 取到你所有的好友ID* * @return 好友id list*/public List<String> getFriends() {List<String> friends = new ArrayList<String>();if (login()) {HttpGet get = new HttpGet("http://friend.renren.com/myfriendlistx.do");ResponseHandler<String> responseHandler = new BasicResponseHandler();try {String friendPage = httpclient.execute(get, responseHandler);Pattern pattern = Pattern.compile("var friends=(.*);");Matcher matcher = pattern.matcher(friendPage);if (matcher.find()) {String str = matcher.group(1);Pattern p = Pattern.compile("\"id\":([1-9][0-9]{0,9})");Matcher m = p.matcher(str);while (m.find()) {friends.add(m.group(1));}return friends;}} catch (Exception e) {e.printStackTrace();} finally {get.abort();}}return null;}/*** 得到renren的requestToken* * @author chenchun* @created 2012-4-18* * @param homeHtml* @return*/public String getRequestToken(String homeHtml) {Pattern pattern = Pattern.compile("requesttoken=(-?[1-9][0-9]*)");System.out.println(homeHtml);Matcher m = pattern.matcher(homeHtml);if (m.find()) {return m.group(1);}return null;}public static void main(String[] args) throws InterruptedException {Renren lw = new Renren("username", "password");lw.login();lw.update("test");}}

httpclient登陆人人网,发表状态、日志,遍历访问所有好友、给好友留言相关推荐

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

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

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

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

  3. 登陆人人网爬取个人信息

    创建scrapy工程 1 2 cd C:\Spider_dev\app\scrapyprojects scrapy startproject renren 创建定向爬虫 1 2 cd renren s ...

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

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

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

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

  6. ProSolid下的遍历访问封装代码

    在ProE二次开发中,时常需要遍历ProSolid下的面.点.轴等几何元素.我们知道,ProToolkit下的遍历函数还是有点小麻烦的,而ProWebLink中就简单很多,比如要遍历某ProSolid ...

  7. HttpClient 4 API –获取状态代码-getStatusLine()。getStatusCode()示例

    在HttpClient API中获取状态代码的快速指南. getStatusLine().getStatusCode()示例和相关的错误. 1.简介 在这个非常快速的教程中,我将展示如何使用HttpC ...

  8. HttpClient 4 API –获取状态码-getStatusLine()。getStatusCode()示例

    在HttpClient API中获取状态代码的快速指南. getStatusLine().getStatusCode()示例和相关的错误. 1.简介 在这个非常快速的教程中,我将展示如何使用HttpC ...

  9. 风云的银光志Silverlight4.0教程之遍历访问客户端用户的本地文件

    微软于PDC2009上发布Silverlight 4 Beta版,微软在Silverlight 4版本中处理了约8000个的Silverlight终端用户的请求,加入了一系列另开发人员兴奋的新特性,最 ...

最新文章

  1. 如何在Windows上做Python开发?微软出了官方教程(附链接)
  2. 共享虚拟服务器,共享虚拟主机和云服务器
  3. QT的QRadioTuner类的使用
  4. Linux Centos7安装hadoop3.x安装流程(跪舔文)
  5. 送花(洛谷 2073)
  6. [转]关于WM_NCHITTEST消息
  7. dbgrid 获取前台页面参数
  8. 教师计算机培训心得体会范文,xx年教师计算机培训心得体会范文.doc
  9. 总线的集中式仲裁(讲述计时器定时查询方式,独立请求方式,链式查询方式的优缺点)
  10. 家庭问题(信息学奥赛一本通-T1362)
  11. 看雪CTF.TSRC 2018 团队赛 第十二题『移动迷宫』 解题思路
  12. mac 安装adb工具
  13. QT学习之做一个简易图片处理器(后续补全)
  14. starting Intent from ProcessRecord with revoked permission android.permission.CALL_PHONE 的错误原因
  15. 攻防世界杂项(misc)--新手练习区(详解十二道题完结,附件做题过程中使用到的各种工具和网站)
  16. 2800首无损格式经典歌曲分享
  17. 为什么谷歌会从零开始构建一个全新的操作系统?
  18. MATLAB初学教程(一)
  19. 数字工厂管理系统的应用领域有哪些
  20. abaqus python_abaqus python脚本入门

热门文章

  1. Ruby 语言问世 | 历史上的今天
  2. 学技术总是浮躁不安,最近想看看佛经名句,使内心稍许安定
  3. plotly使用问题
  4. Java微信支付——公众号支付JSAPI
  5. 18岁歌手出任网游公司CEO,年薪百万
  6. bogus generating test data
  7. android 微博发布,手机上怎么用微博?手机如何发广播?
  8. 谈谈HMI 的自动化生成技术
  9. java学习总结(面试题持续更新)
  10. 计算机黑屏死机,电脑黑屏死机怎么解决(一键修复电脑黑屏死机的方式)