笔者从开始了解到写出这篇博客一共只用了几天的时间,所以本文更适合小白参考
本文以 weibo.cn 为例,但只需修改 Request Header 中的部分参数,也可用与模拟登录 weibo.com

浏览器端操作

firefox 下有款插件挺好用的,但笔者只安装了 Chrome,故本文只介绍 Chrome 下的操作。

  1. 在 Chrome 中打开”weibo.cn”,按下F12,在”Network”中勾选”Preserve log”
    Java 通过 Cookie 模拟登录微博 - 图1

  2. 点击”登录”,输入自己的帐号密码并登录

  3. 登录之后查看刚才的”Network”,下面出现了许多文件,从中找到以自己首页地址命名或命名为”home”的文件并点击,找到”Request Headers”一栏
    Java 通过 Cookie 模拟登录微博 - 图2

浏览器端的操作基本就是这样,接下来我们开始写代码

代码部分

  1. 为了方便操作,笔者将部分操作封装成了实体类。首先是操作 Cookie 的实体: ```java import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.BasicCookieStore;

public class CookieInfo {

  1. private HttpClient client;
  2. private HttpPost post;
  3. private HttpGet get;
  4. private BasicCookieStore cookieStore;
  5. public HttpClient getClient() {
  6. return client;
  7. }
  8. public void setClient(HttpClient client) {
  9. this.client = client;
  10. }
  11. public HttpPost getPost() {
  12. return post;
  13. }
  14. public void setPost(HttpPost post) {
  15. this.post = post;
  16. }
  17. public HttpGet getGet() {
  18. return get;
  19. }
  20. public void setGet(HttpGet get) {
  21. this.get = get;
  22. }
  23. public BasicCookieStore getCookieStore() {
  24. return cookieStore;
  25. }
  26. public void setCookieStore(BasicCookieStore cookieStore) {
  27. this.cookieStore = cookieStore;
  28. }

}

  1. 2.
  2. 接下来定义 WeiboLogin 类,在里面写入登录操作方法。首先需要实例化```eInfo:
  3. <br />`private CookieInfo cookieInfo = new CookieInfo();`
  4. 3.
  5. 接下来设置 Cookie 登录策略,不设置的话微博会拒绝登录
  6. ```java
  7. public WeiboLogin(){
  8. //Cookie策略,不设置会拒绝Cookie Rejected, 设置策略保存Cookie信息
  9. cookieInfo.setCookieStore(new BasicCookieStore());
  10. CookieSpecProvider myCookie = new CookieSpecProvider() {
  11. public CookieSpec create(HttpContext httpContext) {
  12. return new DefaultCookieSpec();
  13. }
  14. };
  15. Registry<CookieSpecProvider> rg = RegistryBuilder.<CookieSpecProvider>create().
  16. register("myCookie", myCookie).build();
  17. cookieInfo.setClient(HttpClients.custom().setDefaultCookieSpecRegistry(rg).build());
  18. cookieInfo.setGet(new HttpGet());
  19. cookieInfo.setPost(new HttpPost());
  20. }
  1. 再写一个方法,将浏览器中刚才看到的”Request Headers”中的参数填入保存,同时加入一个输出语句,用于检验是否成功登录

    1. public void Login() throws ClientProtocolException, IOException, URISyntaxException{
    2. String LoginUrl = "https://weibo.cn/?luicode=20000174";
    3. //添加Request Header,用于模拟登陆
    4. cookieInfo.getGet().setURI(new URI(LoginUrl));
    5. cookieInfo.getGet().addHeader("Content-Type", "text/html; charset=utf-8");
    6. cookieInfo.getGet().addHeader("Host", "weibo.cn");
    7. cookieInfo.getGet().addHeader("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36");
    8. cookieInfo.getGet().addHeader("API-RemoteIP", "192.168.0.1"); //模拟登录IP
    9. cookieInfo.getGet().addHeader("X-Forwarded-For","192.168.0.1");
    10. cookieInfo.getGet().addHeader("CLIENT-IP", "192.168.0.1");
    11. cookieInfo.getGet().addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
    12. cookieInfo.getGet().addHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");
    13. cookieInfo.getGet().addHeader("Accept-Encoding", "gzip, deflate, br");
    14. cookieInfo.getGet().addHeader("Referer", " https://passport.weibo.cn/signin/login?entry=mweibo&r=https%3A%2F%2Fweibo.cn%2F%3Fluicode%3D20000174&backTitle=%CE%A2%B2%A9&vt=");
    15. cookieInfo.getGet().addHeader("Connection", "keep-alive");
    16. cookieInfo.getGet().addHeader("Cookie", "自己的Cookie信息");
    17. HttpResponse response = cookieInfo.getClient().execute(cookieInfo.getGet());
    18. HttpEntity entity = response.getEntity();
    19. //将获取到的网页信息打印出来,检验是否登录成功
    20. String context = EntityUtils.toString(entity);
    21. System.out.println("获取的微博内容"+context);
    22. }
  1. 最后新建 Test 类,写入 Main 主方法,调用 Login()方法即可。如果代码没有问题,那么到这里就能看到自己的首页源代码了。

瓦雀