前言

Wbp4j

前排安利以下使用java完成的基于微博图床api实现的一个上传图片的小轮子,然后里面也有完整的代码可以查看,欢迎戳一下~ 传送门

目的

因为最近个人小项目里需要上传图片,看着自己的1M小水管产生了使用微博图床的念头,然后就开干了。

废话

老夫写代码复制粘贴就是干,结果一搜几乎都是php跟python

语言而已嘛!道理是相通的问题不大的(疯狂暗示

登陆

站在巨人的肩膀上确实是能轻松不少,经过搜索引擎的指引我们知道微博登录分两个步骤 ,第一个是预登陆,获取相关的登录信息之后再登录

预登陆

去微博首页随便填个用户名,然后通过抓包可以发现

这有一个神奇的prelogin请求,这就是我们想要的

https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=MTkxNjE1MjM0NSU0MHFxLmNvbQ%3D%3D&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.19)&_=1528984661146

再看一下参数,一眼(?)就能看出 一下两个参数是我们需要的

su:base64后的用户名
_:时间戳

这就好办了,拼接一下~

private PreLogin preLogin() throws IOException {String preLoginUrl = "https://login.sina.com.cn/sso/prelogin.php?";String base64Username = Base64.getEncoder().encodeToString(username.getBytes());String params = "entry=weibo&su=" + base64Username + "MTIzNDU2&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.19)&_=";String url = preLoginUrl + params + System.currentTimeMillis();
}

然后这里假装GET了一下那个url,返回的是一段json

然后再保存一下这些信息,然后预登陆就完成啦,是不是挺简单呢

到这里确实还是简单的,但是到后面就蛋疼了

登录

首先来看一下预登陆返回的json

{"retcode":0,"servertime":1528984659,"pcid":"yfe839c398fb963099182103a19af18353ce05","nonce":"VOMF8H","pubkey":"EB2A38568661887FA1...3181D6442443","rsakv":"1330428213","is_openlock":0,"showpin":0,"exectime":13
}

emmm就看一下,这些都有啥用接下来说,然后我们再来登录一下看看都发了些什么东西

里面有几个字段是根据prelogin返回的内容发回去的所以不用管,就是那个sp是个啥玩意呢,虽然我知道是密码没错,看到rsa2,看到pubkey就觉得事实并非这么简单,根据搜索引擎的指引,我们找到微博用于登录的加密密码的js

这是密码加密的核心代码了
然后对着写不就完事了嘛,当然是这么想的
看着别人python的rsa.encode(pubkey,*啥)的

由于个人对加密这一块几乎没啥概念,所以只能继续依靠搜索引擎的能力的,找了半天使用java加密微博密码的,要么是直接用脚本引擎去执行以上的js代码,要么就是自己用浏览器登录后再把cookie复制粘贴,emmm,作为全自动的模拟登陆不能忍,然后花了一个下午去摸索终于成功了,不想多说了直接贴代码吧,反正我也解释不来为啥这么干

以下哪个pubExp我也不知道叫啥随便起的名字,对应着以上js的那个"10001"

public static String encode(String toEncode, String pubKey, String pubExp)throws NoSuchAlgorithmException, NoSuchPaddingException,InvalidKeySpecException, InvalidKeyException, BadPaddingException,IllegalBlockSizeException {KeyFactory keyFactory = KeyFactory.getInstance(RSA_ALGORITHM);BigInteger modulus = new BigInteger(pubKey, 16);BigInteger publicExponent = new BigInteger(pubExp, 16);RSAPublicKeySpec rsaPublicKeySpec = new RSAPublicKeySpec(modulus, publicExponent);PublicKey publicKey = keyFactory.generatePublic(rsaPublicKeySpec);Cipher cipher = Cipher.getInstance(RSA_ALGORITHM);cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] encodeStr = cipher.doFinal(toEncode.getBytes());return BytesUtils.bytesToHex(encodeStr);
}

然后最难的步骤已经成功啦,接下来只需要把对应的参数填上去就ok啦,然后再post就完事啦~

Java模拟登陆微博获取cookie+使用微博图床api上传图片相关推荐

  1. Jsoup实现java模拟登陆

    Jsoup实现java模拟登陆 1:如何获取cookies. 1.1:由于需要登录,故先模拟登陆时的那一个<form>,这里用map来装载变量名称,变量值. Map<String, ...

  2. 233网校java_java辅导:使用java模拟登陆考试大

    java辅导:使用java模拟登陆考试大 2009年1月5日来源:233网校网校课程 在线题库评论 分享到 public static void loginexamda() { URL url = n ...

  3. python爬虫——基于selenium用火狐模拟登陆爬搜索关键词的微博

    preface:最近的任务,还是爬微博.之前的用不上,post提交,还是不太熟悉,模拟登陆不了,故换种方式,用selenium模拟登陆,从此任何登录以及js调用都是浮云,我模拟登录分分钟解决.之前的时 ...

  4. java 模拟登陆exe_Java简单模拟登陆和爬虫实例---博客园老牛大讲堂

    鉴于有人说讲的不清楚,我这里再详细补充一下:更新日期:2017-11-23 本片文章适合初学者,只简单说了一下爬虫怎么用,和一个简单的小实例.不适合你的就可以不看了.----博客园老牛大讲堂 1.什么 ...

  5. java 模拟登陆 post_Java开发网 - 高手帮忙啊 (如何用java模拟post方式进行登陆论坛?)...

    于 2003-05-03 02:51 请教高手 我如何用java模拟post方式进行登陆论坛? 我先 URLConnection uc=htpurl.openConnection(); uc.setD ...

  6. java上传微博图床_php上传图片到微博图床

    微博是个好图床,上传后就可以通过一个url来访问了.今天就用php来上传图片到微博,这也是来自sf的一个问题, 里面还提到一个python版本. 有2种方式实现上传图片: 如果要用 http://pi ...

  7. html模仿微信好友列表,微信的模拟登陆及获取好友列表

    最近没事写了个微信模拟登陆的代码,测试可以到今天2013年11月4日为止是可以登陆的 登陆是用的jsoup实现的,一个简单又强大的工具.不懂的可以@红薯站长去 Connection.Response ...

  8. java模拟登陆教务系统_Java模拟登录高校教务系统

    模拟登陆部分代码: 本次使用HttpClient 4.3进行开发, 该版本与之前的代码写法风格相差较大, 大家多留意下.需导入Jar包:commons-logging-1.1.3.jar / http ...

  9. java模拟登陆正方教务管理系统

    学了java后想设计一个在线提交活动中心使用申请的web网站,但问题是学生身份的验证.开始时是设想每年爬取一次全校学生信息,但速度太慢了,而且学号的规律也不清楚.然后想到借用教务管理系统自带的验证功能 ...

最新文章

  1. java Export Excel POI 转
  2. ListView Viewholder的坑 线性布局的坑
  3. 数据中台应用实战50篇(一)-带你概览BI、数据仓库、数据湖与数据中台之间有什么关联关系?(建议收藏)
  4. c# 弹性和瞬态故障处理库Polly
  5. nextdate函数白盒测试问题 软件测试_软件测试基本常识
  6. 用JavaScript获取页面上被选中的文字的技巧
  7. JSP开发环境配置问题解答
  8. 2018-2019-1 20165214 《信息安全系统设计基础》第八周学习总结
  9. 官宣!阿里进军 5G,成立 XG 实验室发力新基建
  10. 人工智能 —— 人工智能发展大事件
  11. FileNotFoundError: [Errno 2] No such file or directory: ‘./train/hazy/hazy‘
  12. Excel办公中的应用(中秋快乐学习)(注意:全部为英文符号)
  13. 《微型计算机原理与接口技术》复习笔记(三)
  14. OpenGL Android 安卓 入门 GLES20 初学者 初级 官方
  15. MySQL--基础知识点--64--等值连接/自连接/自然连接/外连接
  16. Thread.Sleep(0)的妙用
  17. 打开html自动跳转其他,打开网页直接跳转其他网页怎么办
  18. EXCEL解密打开密码
  19. 所学计算机课程或艺术技能,浅议小学计算机教学论文
  20. MySQL 8.0.17安装教程(windows 64位)

热门文章

  1. 计算机创业创新浅谈,浅谈计算机教学中如何渗透创业教育
  2. Where I grow up 我长大的地方
  3. 软件测试如何选择适合自己的工作?
  4. 概率密度变换公式 雅可比矩阵_机器人雅可比矩阵的理解和常用公式
  5. 初级C++STL:初阶模板 | String的使用
  6. 如何在 Android 中使用 ObjectBox 数据库框架?
  7. cmd mysql 数据分析_小白学数据分析--与MySQL有关的小知识
  8. 求解欧拉方程的c语言,用有限体积方法求解欧拉方程
  9. soap soapenv区别_soap soapenv SOAP-ENV 区别
  10. 左程云大厂算法刷题班——02