(最新)HttpClient4模拟登录腾讯微博 .

public static WeiBoUser login(String uin, String p) {
  WeiBoUser u = null;
  DefaultHttpClient client = new DefaultHttpClient(
    new ThreadSafeClientConnManager());

  /*
   * client.getParams().setParameter(
   * HttpConnectionParams.CONNECTION_TIMEOUT, 5000);
   */
  try {

   /********************* 获取验证码 ***********************/
   HttpGet get = new HttpGet("http://check.ptlogin2.qq.com/check?uin="
     + uin + "&appid=46000101&ptlang=2052&r=" + Math.random());
   get.setHeader("Host", "check.ptlogin2.qq.com");
   get.setHeader("Referer", "http://t.qq.com/?from=11");

   get
     .setHeader("User-Agent",
       "Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0");
   HttpResponse response = client.execute(get);

   String entity = EntityUtils.toString(response.getEntity());
   String[] checkNum = entity.substring(entity.indexOf("(") + 1,
     entity.lastIndexOf(")")).replace("'", "").split(",");
   System.out.println(checkNum[0]);
   System.out.println(checkNum[1]);
   System.out.println(checkNum[2].trim());
   System.out.println(checkNum[2].trim().replace("\\x", ""));
   String pass = "";

   /******************** *加密密码 ***************************/
   ScriptEngineManager manager = new ScriptEngineManager();
   ScriptEngine engine = manager.getEngineByName("javascript");

   String jsFileName = "src/md5.js"; // 指定md5加密文件
   // 读取js文件
   FileReader reader;

   reader = new FileReader(jsFileName);
   engine.eval(reader);

   if (engine instanceof Invocable) {
    Invocable invoke = (Invocable) engine;
    // 调用preprocess方法,并传入两个参数密码和验证码

    pass = invoke.invokeFunction("QXWEncodePwd",
      checkNum[2].trim(), p, checkNum[1].trim()).toString();
    System.out.println("c = " + pass);
   }
   reader.close();

   /************************* 登录 ****************************/
   get = new HttpGet(
     "http://ptlogin2.qq.com/login?ptlang=2052&u="
       + uin
       + "&p="
       + pass
       + "&verifycode="
       + checkNum[1]
       + "&aid=46000101&u1=http%3A%2F%2Ft.qq.com&ptredirect=1&h=1&from_ui=1&dumy=&fp=loginerroralert&action=4-12-14683&g=1&t=1&dummy=");
   get.setHeader("Connection", "keep-alive");
   get.setHeader("Host", "ptlogin2.qq.com");
   get.setHeader("Referer", "http://t.qq.com/?from=11");
   get
     .setHeader("User-Agent",
       "Mozilla/5.0 (Windows NT 5.1; rv:13.0) Gecko/20100101 Firefox/13.0");
   response = client.execute(get);
   entity = EntityUtils.toString(response.getEntity());
   System.out.println(entity);
   if (entity.indexOf("登录成功") > -1) {
    get = new HttpGet("http://t.qq.com");
    response = client.execute(get);
    entity = EntityUtils.toString(response.getEntity());
    Document doc = Jsoup.parse(entity);
    Element es = doc.getElementById("topNav1");
    String displayName = "";
    if (es != null) {
     Elements e = es.getElementsByTag("u");
     if (e != null && e.size() > 0)
      displayName = e.get(0).text();
    }

    u = new WeiBoUser();
    u.setUserName(uin);
    u.setUserPass(p);
    u.setDisplayName(displayName);
   }

  } catch (Exception e) {
   e.printStackTrace();
   System.out.println(e.getMessage());
   return null;
  }
  return u;
 }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值