• 使用HttpClient模拟登录 博客园


    最近在做Android版的博客园客户端,在考虑添加入登录功能,以实现获取更多的信息。

    现在测试使用HttpClient进行模拟登陆。

    登录页面:http://passport.cnblogs.com/login.aspx

    登录结果页面:http://home.cnblogs.com/ 、 http://www.cnblogs.com/ 、……

    登录的时候要求提供用户名和密码,属性分别是tbUserName 和 tbPassword;如图所示:

    登录成功,转到下一个页面时,需要提供Cookies,还可以设置UA等属性:

    具体代码:

     1 package com.arlen.login;
     2 
     3 import org.apache.commons.httpclient.Cookie;
     4 import org.apache.commons.httpclient.HttpClient;
     5 import org.apache.commons.httpclient.NameValuePair;
     6 import org.apache.commons.httpclient.cookie.CookiePolicy;
     7 import org.apache.commons.httpclient.methods.GetMethod;
     8 import org.apache.commons.httpclient.methods.PostMethod;
     9 import org.apache.commons.httpclient.params.HttpMethodParams;
    10 
    11 public class ImitateLogin {
    12 
    13     public static void main(String[] args) {
    14         String userName = "username";
    15         String password = "password"
    16         String loginUrl = "http://passport.cnblogs.com/login.aspx";
    17         String dataUrl = "http://home.cnblogs.com/";
    18         HttpClientLogin(userName, password, loginUrl, dataUrl);
    19     }
    20 
    21     private static void HttpClientLogin(String userName, String password,
    22             String loginUrl, String dataUrl) {
    23         HttpClient httpClient = new HttpClient();
    24         httpClient.getParams().setParameter(
    25                 HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8");
    26         PostMethod postMethod = new PostMethod(loginUrl);
    27 
    28         NameValuePair[] postData = { new NameValuePair("tbUserName", userName),
    29                 new NameValuePair("tbPassword", password) };
    30         postMethod.setRequestBody(postData);
    31 
    32         try {
    33 
    34             httpClient.getParams().setCookiePolicy(
    35                     CookiePolicy.BROWSER_COMPATIBILITY);
    36             httpClient.executeMethod(postMethod);
    37             Cookie[] cookies = httpClient.getState().getCookies();
    38             StringBuffer stringBuffer = new StringBuffer();
    39             for (Cookie c : cookies) {
    40                 stringBuffer.append(c.toString() + ";");
    41             }
    42 
    43             GetMethod getMethod = new GetMethod(dataUrl);
    44             getMethod.setRequestHeader("Cookie", stringBuffer.toString());
    45             postMethod.setRequestHeader("Host", "passport.cnblogs.com");
    46             postMethod.setRequestHeader("Referer", "http://home.cnblogs.com/");
    47             postMethod.setRequestHeader("User-Agent", "AndroidCnblogs");
    48             httpClient.executeMethod(getMethod);
    49 
    50             String result = getMethod.getResponseBodyAsString();
    51             System.out.println(result);
    52 
    53         } catch (Exception e) {
    54             e.printStackTrace();
    55         }
    56     }
    57 
    58 }
  • 相关阅读:
    Javascript 中的浮点数精度丢失问题
    react中使用字符串中生成HTML
    前端-HTML规范
    js 数组(Array)的使用
    ES6变量声明解析
    cookies sessionlStorage和localStroage的区别
    面向对象
    迭代器、生成器、装饰器
    内置函数和文件读取
    函数
  • 原文地址:https://www.cnblogs.com/zhangtingkuo/p/3968450.html
Copyright © 2020-2023  润新知