java模拟登录新浪微博(通过cookie)


这几天一直在研究新浪微博的爬虫,发现爬取微博的数据首先要登录。本来打算是通过账号和密码模拟浏览器登录。但是现在微博的登录机制比较复杂。通过账号密码还没有登录成功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<CookieSpecProvider> rg = RegistryBuilder.<CookieSpecProvider> 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 模拟登录新浪微博(通过cookie)相关推荐

  1. java实现模拟登录新浪微博

    最近做新浪微博的数据挖掘,遇到不少的问题,搜索了不少的网上资源,现在我来总结一下,希望对大家有所帮助: 1.准备工作 只是登录无需申请新浪和腾迅的开发者账号,如果需要发送微博功能,需要申请一个新浪和腾 ...

  2. java模拟登录获取Cookie

    关于java模拟登录获取Cookie时经历的坑 springboot 引入jar包版本 通过httpclient来模拟登录 代码部分 表单提交部分代码(未测试正确与否,只是找了前辈们的东西过来) 总结 ...

  3. Spring Boot + Java爬虫 + 部署到Linux (三、Java爬虫使用代理,模拟登录,保存cookie)

    很多网站对资源都有一定的限制.如果不登录,不是网站的登录用户(会员)访问的话,一些资源会访问不到.这对我们爬虫是十分不利的.而绝大多数网站都是通过登录之后,向浏览器设置cookie,达到验证的功能. ...

  4. 使用Java模拟登录

    使用Java模拟登录 运行环境 步骤 浏览器阶段 思路 编码 使用python模拟登录 运行环境 本次开发在Windos上进行,运行环境为: java 11.0.2 2019-01-15 LTS Ja ...

  5. 用java模拟登录正方教务系统,抓取课表和个人成绩等数据

    之前学了一些java web的编程,理解了web应用的原理后,就突然想到,可以用java模拟登录吉珠的教务系统,然后爬取里面的课表.成绩.个人信息等等数据,然后就可以写成一个简易的课表APP. 一.第 ...

  6. curl模拟登录新浪微博

    curl模拟登录新浪微博 这几天要做个获取新浪微博@我的信息, 又不用第三方登录,所以只能通过模拟登录来获取信息,研究的一下发现直接模拟登录微博比较困难,验证的算法比较复杂,于是绕道通过登录新浪通行证 ...

  7. 模拟登录新浪微博-python

    模拟登录新浪微博(python) reference: http://www.jb51.net/article/46053.htm http://blog.csdn.net/u010487568/ar ...

  8. pythonurllib新浪微博_python模拟登录新浪微博抓取数据(cookielib和urllib2).doc

    HYPERLINK "/article/python/22972.html" /article/python/22972.html python模拟登录新浪微博抓取数据(cooki ...

  9. php读取cookie文件,PHP读取CURL模拟登录时生成Cookie文件的方法,_PHP教程

    PHP读取CURL模拟登录时生成Cookie文件的方法, 本文实例讲述了PHP读取CURL模拟登录时生成Cookie文件的方法.分享给大家供大家参考.具体实现方法如下: 在使用PHP中的CURL模拟登 ...

最新文章

  1. 论文里常出现的可扩展性(Scalability)是什么意思呢?
  2. C语言中标准输入流、标准输出流、标准错误输出流
  3. git commit –a时使用vim编辑提交信息
  4. spring+struts2+mybatis
  5. 超声乳化设备行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  6. debian10编译安装mysql
  7. word文字上下间距怎么调_word文档上下行间距怎么调整
  8. python扫描局域网端口和ip_Python实现扫描局域网活动ip(扫描在线电脑)
  9. Cisco Packet Tracer安装
  10. 谷歌电子邮件服务器,谷歌Gmail为什么会能一统美国电邮服务
  11. vscode免密登录需要更改authorized_keys的权限
  12. 人力面试时常规的面试题
  13. #51CTO学院四周年# 我和51cto的故事
  14. Learning to Track with Object Permanence阅读笔记
  15. Android GridView实现自定义日程表课表
  16. 计算机视觉领域常见期刊和会议
  17. hana数据库连接oracle,HANA SQL参考及Oracle对照
  18. 基础的拉普拉斯金字塔融合用于改善图像增强中易出现的过增强问题(一)
  19. 倪老师计算机,北京交通大学计算机与信息技术学院导师教师师资介绍简介-倪蓉蓉...
  20. Spring自动装配的优缺点

热门文章

  1. Kotlin基本语法 问好(?)与两个叹号(!!)
  2. 073 定积分基本公式牛顿-莱布尼茨公式证明
  3. VMware安装windows 7系统
  4. Engineer-Exec02-参考解析
  5. Tableau学习之表格占比实现
  6. 【web系列一】 开发环境配置
  7. transpose公式_excel的转置操作TRANSPOSE函数详解
  8. L52.linux命令每日一练 -- 第八章 Linux磁盘与文件系统管理命令 -- resize2fs和fsck
  9. 周易六十四卦——无妄卦
  10. .NET C# IOS内购支付功能