这几天一直在研究新浪微博的爬虫,发现爬取微博的数据首先要登录。本来打算是通过账号和密码模拟浏览器登录。但是现在微博的登录机制比较复杂。通过账号密码还没有登录成功QAQ。所以就先记录下,通过cookie直接访问自己的微博主页。

微博登录的认证过程

微博登录的细节在其他的博客里已经有了详细的介绍。大概就是用户输入账号和密码后与服务器产生几次会话。若认证成功后,微博的服务器会返回给浏览器一个cookie。在之后访问微博的其他内容时,通过发送这个cookie就能正常访问微博了。所以用过cookie访问微博,过程就简化为了获取cookie,然后通过程序模拟浏览器访问微博首页。

获取微博的cookie

通过抓包软件或浏览器自带的调试工具都可以抓取网页的cookie。本文使用的是火狐浏览器的HttpFox 插件来获取微博的cookie。

1,打开微博首页,打开HttpFox

2,输入用户名和密码,勾选“记住我”,点击登录。点击登录后我们可以看到HttpFox下产生了很多的URL。进入主页后在HTTPFox中找到你主页对应的URL,如下图:

点击主页的URL后,我们可以看见左下方的一些信息。包括“Headers”,“Cookies”等。

3,在“Headers”中可以看到有一条“Cookie”的信息。这个就是我们所需要的cookie了。点击右键保存cookie。

至此,就获取了我们登录时所要的cookie了!

代码实现

由于我们是直接通过cookie进行的登录。所以少了很多认证的过程。直接使用HttpClient的相关包,带上之前获取的cookie就可以访问个人首页。获取了首页,我们就可以通过正则表达式来分析微博数据了。

import java.io.IOException;

import java.net.URI;

import java.net.URISyntaxException;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.config.Registry;

import org.apache.http.config.RegistryBuilder;

import org.apache.http.cookie.CookieSpec;

import org.apache.http.cookie.CookieSpecProvider;

import org.apache.http.impl.client.BasicCookieStore;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.impl.cookie.DefaultCookieSpec;

import org.apache.http.message.BasicHeader;

import org.apache.http.protocol.HttpContext;

import org.apache.http.util.EntityUtils;

/**

*

*

*@author zkw

*

*/

public class cookieLogin {

private HttpClient client;

private HttpPost post;

private HttpGet get;

private BasicCookieStore cookieStore;

public cookieLogin() {

//cookie策略,不设置会拒绝cookie rejected,设置策略保存cookie信息

cookieStore = new BasicCookieStore();

CookieSpecProvider myCookie = new CookieSpecProvider() {

public CookieSpec create(HttpContext context) {

return new DefaultCookieSpec();

}

};

Registry rg = RegistryBuilder. create().register("myCookie", myCookie)

.build();

client = HttpClients.custom().setDefaultCookieStore(cookieStore).setDefaultCookieSpecRegistry(rg).build();

get = new HttpGet();

post = new HttpPost();

}

public void Login() throws ClientProtocolException, IOException, URISyntaxException {

String LoginUrl = "你的微博主页网址";

get.setURI(new URI(LoginUrl));

get.addHeader("Host", "weibo.com");

get.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0");

get.addHeader("Accept", "*/*");

get.addHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");

get.addHeader("Accept-Encoding", "gzip, deflate");

get.addHeader("Referer", "http://weibo.com/");

get.addHeader(new BasicHeader("Cookie", "上述获取的cookie值"));

HttpResponse resp = client.execute(get);

HttpEntity entity = resp.getEntity();

String cont = EntityUtils.toString(entity);

System.out.println("获取的微博内容:" + cont);

}

public HttpClient getClient() {

return client;

}

public void setClient(HttpClient client) {

this.client = client;

}

public HttpPost getPost() {

return post;

}

public void setPost(HttpPost post) {

this.post = post;

}

public HttpGet getGet() {

return get;

}

public void setGet(HttpGet get) {

this.get = get;

}

public BasicCookieStore getCookieStore() {

return cookieStore;

}

public void setCookieStore(BasicCookieStore cookieStore) {

this.cookieStore = cookieStore;

}

public static void main(String[] args) throws ClientProtocolException, IOException, URISyntaxException {

new cookieLogin().Login();

}

}

总结

通过cookie登录微博是一种快捷方式,但是存在不少问题。所以博主还在研究微博账号认证过程,希望过几天能有所突破QAQ。

java微博模拟登陆_java 模拟登录新浪微博(通过cookie)相关推荐

  1. php rsa2 微博,php新浪通行证登录新浪微博登录模拟登录(浏览器版)2016

    由于需要项目需要管理微博平台内容,集成登录微博管理平台功能,所以在抓取网页基础上探索了一下浏览器模拟登录,已经实现登录功能,采用JQuery和php结合的方式实现的,其中需要注意跨域访问问题,代码如下 ...

  2. python的模拟登录原理_python---cookie模拟登陆和模拟session原理

    cookie模拟登陆: import tornado.web class IndexHandler(tornado.web.RequestHandler): def get(self): #self. ...

  3. android模拟登陆,Android模拟登录V2EX

    最近在撸一个V2EX的客户端,官方API缺少一些功能如登录,发帖等,撸完官方API总觉得少了什么,本篇文章主要通过模拟登录实现一些官方没提供API的功能 观察登录传输的数据 在网页上登录帐号,通过ch ...

  4. UI测试框架:playwright-python + pytest 模拟登陆后保持登录状态进行测试,避免重复登陆

    playwright-python + pytest 模拟登陆后进行测试 playwright-python + pytest 模拟登陆后进行测试 1. 初始(遇到的问题) 2. 问题的解决方法 1. ...

  5. php怎么实现模拟登陆,php模拟登陆的实现方法_PHP教程

    php模拟登陆的实现方法 php模拟登陆的实现方法,这里分别列举两种方法实现模拟登陆人人网.具体实例代码如下: (1)使用snoopy模拟登陆 referer='http://www.renren.c ...

  6. 关于模拟登陆的小结-抓包、cookie、session和token

    概述 上个星期根据bcloud写了个Java版本的登陆项目.其实本来时想做个Linux的百度云登陆软件,但是做到获取bdstoken的时候出了问题解决不了.后来我把bcloud项目下了下来用发现也有问 ...

  7. 日常小结-关于模拟登陆的小结-抓包、cookie、session和token

    概述 上个星期根据bcloud写了个java版本的登陆项目.其实本来时想做个linux的百度云登陆软件,但是做到获取bdstoken的时候出了问题解决不了.后来我把bcloud项目下了下来用发现也有问 ...

  8. Python3 微信公众平台模拟登陆 requests模拟请求

    声明此代码仅供技术交流学习,擅自用于其他,一切后果与本人无关 目标网址: https://mp.weixin.qq.com/ 所谓模拟登陆,就是自己模拟构造请求发送给服务器,然后服务器返回认证的信息过 ...

  9. java简单小程序_Java简易登录注册小程序

    这篇文章主要介绍了Java图形界面开发,简易登录注册小程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 登录注册小代码,将学过的一些小知识融合在一起进行了使用,加深印象.本例中如果有注释不详细的 ...

  10. java 天猫模拟登陆_爬虫登录 最好是天猫爬虫登录 有经验的大神请赐教

    public String Post(string url, stringpostData) {try{#region 登录 string loginurl = "http://10.16. ...

最新文章

  1. web前端入门学习 css(7)css高级技巧 (精灵图、字体图标、css三角、鼠标样式、表单轮廓线、文本框拖拽、垂直对齐、图底空白缝隙、margin负值、溢出文字省略号、文字环绕、css初始化)
  2. 【Android】SlidingMenu属性详解(转)
  3. MSF(三):信息收集
  4. 终端模拟器编译c语言,编写你自己的Terminal emulator
  5. JSON.parse和JSON.stringify 参数详解
  6. 测试每个阶段需要输出的文档
  7. Android应用程序内部启动Activity过程(startActivity)的源代码分析
  8. 神经网络Neural Net背景介绍
  9. OpenGL超级宝典(第7版)之VS2019使用sb7框架搭建自己的程序
  10. 电路与电子技术课程设计报告(正弦、方波-三角波、可调矩形波、可调锯齿波发生器)
  11. 《金牌网管师——助理级网吧网管》目录
  12. [云原生专题-34]:K8S - 核心概念 - 网络 - Web服务器与反向代理服务器nginx入门介绍
  13. 现在的 Linux 内核和 Linux 2.6 的内核有多大区别?
  14. Hazelcast 集群
  15. 模拟电路学习-之容抗和感抗
  16. 我的Go+语言初体验——Demo游戏体验篇(直男程序员的真实体验)
  17. 华为路由模拟器3.0参考实验8----单臂路由无法ping通问题分析
  18. Python小程序之超市买水果
  19. kibana 搜索语法
  20. Java自学教程!mysql环境变量配置好了之后怎么办

热门文章

  1. layui icon服务器上显示不出来,关于layui的动态图标不显示的解决方法
  2. 手把手教你智能硬件开发(一) 我选Arduino
  3. Win10WIFI链接不上||无线网卡错误代码56
  4. setoolkit制作简单钓鱼网站
  5. 【Impala】基于Hive的快速大数据查询引擎——Impala知识点总结
  6. sql 查询in的集合元素过多优化方式
  7. word2016自动目录样式修改
  8. 1284. Minimum Number of Flips to Convert Binary Matrix to Zero Matrix
  9. 微信平台商户开通证书相关问题盘点
  10. 【数字信号去噪】基于matlab小波变换地震波去噪【含Matlab源码 1954期】