自学安卓练习作品单词APP(1)-安卓的hello word与有道字典防爬虫破解
1.前言
闲来无聊.手机每天又是都接触的东西.程序什么的最容易接触到.想到有些人说前后端都做就是全栈的说法.哦,你看html5全栈.
要我说多接触一些多有意思.天天写后端.还不是业务层.又不是什么高大上的算法.前端有意思的东西才多.当然我是那种比较old的.不会ag.vue,react.只会jq.拿起一把梭子就是干.哇.你看看这个前端的水果然深.
接下来说app要完成那些目标了.
1.查词(这个太简单了)
2.翻译(调用有道的)
3.句式分析(本来在想英语是不是有什么规律.后来一找有人做了.直接嵌入就行了.)
4.单词匹配(就是根据一些乱七八糟的规则推荐一些相同的单词)
5.爬虫文章(暂定)
要用到的相关技术与内容
1.sqlite本地数据库,(存放单词数据库)
2.webView的使用
3.http请求模拟
4.三方工具navicat,用来数据传输msyql到sqlite,fiddler,用来抓包
5.要会安卓的hello word
2.开工
1.下载android studio
运行hello word
android studio有个gradle build running时间特别长的问题很讨厌一开始就第一次快.后来就卡死了.百度的方法也用了.不怎么好使.后来清了清缓存莫名其妙的好了.
2.真机调试
刚开始最困难的就是有些选项不知道在哪里.一些常规的使用也不太会.真机这里就是报设备找不到.网上找的解决方案.那个按钮也没看到在哪里.后来点下面2个地方会好
右边那个是我自己摸索出来的.下面的是别人告诉我的
3.布局
新手嘛.我就拖控件了.和winform差不多.textView拖得时候在中间.显示的时候就到了最上面了.这个问别人了.把截图里面的部分换成RelativeLayout.然后就正常了
4.获取控件,添加事件
过程我都懂,代码不会,用嘴编程
而且坑爹的是.这个东西我没有百度到.其实这对于看视频学习的来说完全不是什么问题.我是直接上来硬干.还好可以问别人.于是别人帮我解决了.findViewById.会了不难.难了不会.....下图是获取控件和添加事件.好了拦路虎解决后.别的应该就不是什么问题了.我这样想.
5.获取文本框的值.填充的TextView中
这里无鸭梨,一开始我写复杂了.不知道这个CharSuquence就是文本框的值.我之前是重新获取了一遍.
6.研究SQLite
这个就简单了.到这里.网上教程一堆.想起一位朋友说的面向百度编程.百度看了下.有个抽象类.继承实现后就可以了.不过一开始想的问题是看到代码.这个数据库不会不能初始化吧.每次都需要创建.后来看到说是不存在才会创建.存在就不会了.才放心了.然后找到在本机的位置.copy出来.不过这个数据库的帮助类.这个初始化对我来说用处不大.我的数据是希望提前存储进去.这里只是查询就好了.不过这个SQLite的sql语句和mysql的不兼容.有些关键字不一样还有字段类型.
这里多叨叨两句.百度的时候.看到有2个查询的方法.一个就是sql语句.一个是参数化的查询方法.把sql语句的这个位置的东西当做参数传进去.好像记得有7个参数之多......给不会sql的人用的.这里真的感觉多学点东西是有用的后台的东西.安卓也会用到.其实后面前端的东西也会用到.想到一个成语触类旁通.这个挺重要的.
7.SQLite数据初始化
找到SQLlite的位置在data目录下面.自己的包名下面.copy出来后把mysql里面的单词数据copy进去.这个单词的数据源是之前没事的时候弄的.本来以为写了篇文章的.找了下.没想到没有.这个数据源的格式有点问题.显示的不是中文.是Unicode.记得当时解析这个东西还弄了半天.要准确的把里面的Unicode东西拿到.然后进行转换.当时用正则取的.然后就是数据传输了.这个sql语句不兼容.如果是用sql文件的话.也不能执行.好在navicat有个同步功能.可以完成.不过也有点小bug.sql估计使用单引号括起来的.然后如果字段里面有单引号就会报错.这里同步的时候.关掉事务.忽略错误.有10几个好像有问题.不过应该用不到.懒得用手处理了.传输的时间特别的长.用了快3个小时.然后SQLite的文件到了78MB.占空间还不小.有数据库后.剩下的就和后台差不多了.查询数据库.
8.WebView研究
安卓的的这个东西小坑还不少.弄个的原因是因为找到了一个句式分析的网站.本来想接口接入的.不过他们那个接口太原始了.返回的html代码片段.没法用....还是直接嵌入网站算了.
第一个小坑是loadUrl跳转浏览器.百度了一下.尝试了几个就解决了.反正就是设置一堆参数就是了.要不js什么的也不能用.js也是后面的一个坑
第二个是页面load后是白屏.不显示.这个还真没找到.后来看到什么授权.我猜估计是https的原因.我一开始是访问的百度.有https.算了.我接入的也没有这个东西.换了一个就出来了.
第三个网上的跳浏览器是点击链接.我的是一load就跳.这里应该是重定向的原因.相等于跳转了.又让我想到了融会贯通.这个是前端或者带点后的知识.页面重定向.
第四个不是小坑就是正常的技术研究吧.执行js.首先让输入框获取焦点他会清空提示文字.这个很简单.他本来就有onclik事件.直接调用就是了.剩下的就是把传来的内容写入到页面中.这里需要一些前端的知识.
第五个是个小坑.就是执行js的时候要在页面加载完后去执行.网上找了页面加载完事件.有个WebViewClient里面的事件.说是只会执行一次.有bug就没有用.不过这onProgressChanged也有bug.就是会多次被调用.而且还是百分百会执行三遍.也没找到解决办法.后来加了个标记变量.执行过后.就不在执行了.
第六个用户登录信息问题.WebView自带用户信息保存.不用做模拟登录了.自己手动登录一次.完事.
9.网络请求和UI界面更新,网络权限
这里应该是前面说的.不过没想起来.就是主线程里面不能进行网络请求.子线程不能进行界面操作.百度.这里也比较简单.不过感觉就是代码有点凌乱.3个关键字.Thread,Handler,Runnable.照猫画虎就行了.这里和winform差不多.不过winform里面没有安卓这么严格.安卓不这么做直接报错.对了还有一个权限的问题.就是网络权限.这个也需要配置一下
10.jar包引入
httpHelper需要用到一个 apache的包.用过maven.gradle这个使用上倒是感觉问题不大.不过不知道哪里抽风.死活引不进来.好在安卓对本地jar包的引用.可是比java Web对于本地jar包引用.友好太多了.java web得弄个私服.要不就是添加本地仓库.普通引用.打包各种问题.安卓直接丢进libs就好了.这个和.net差不多很方便.这个gradle坑先不管了.代码能跑就行.条条大道通罗马.这条不行.换一条
11.activity研究
这个百度内容也挺多的.主要就是如何创建.然后怎么显示还有参数的传递.也挺顺利的.没啥坑
12.有道接口研究
重点来了.这个小妖精有点磨人.截止我写这篇文章的时候.还没有调通.不过我相信我有办法能调通它.
一开始我想简单了.以为就是一个普通的接口.结果返回errorCode:50.百度了一下.有人研究过了.也有文章.不过里面的方法没好使.我在重新梳理一遍吧.这个是百度到的文章.作者也是对这个挺清楚的.不过评论说照着文章已经不能用了.我看了下源码.好像那个盐值确实已经换了.出现问题不可怕.知道问题原因就行.我用手机调总是不行.所以第一步先不用手机调用.先自己模拟吧.
用Python破解有道翻译反爬虫机制
https://blog.csdn.net/nunchakushuang/article/details/75294947
这里要用一下fiddler了.这可抓包可模拟.小神器一枚.其实在抓手机包的时候.我已经发现了一点问题.就是参数可能传错了.这里面的等于号已经被转义了.我找的那个httpHelper对参数的处理有点问题.正确的应该是a=b&这样之类的.
通过上面的文章知道这个接口是在本地加验证信息的.因为里面有时间.所以我的第一步猜想是这个验证信息会不会有过期时间.我用相同的header头发起了.好几次信息.并没有错误.看来是没有验证时间.只是用时间戳当验证信息了.
那其实这里的salt是可以固定的.我们不需要每次去生成新的.然后就是根据文章里面的去找这个盐值了.首先下载js.然后像文章说的去格式化.保存成js.用idea打开.这个可以帮助分析语法结构.否则光靠搜索有些东西不太好找.
我们根据浏览器的请求信息.直接搜索typoResult搜索.这个就一个关键字.直接就找到了.这里的压缩混淆.其实拦路的作用没有特别的大.然后看sign签名.里面有个D.这个就是放盐值的变量.如果光靠搜索.你知道是D但是这个字母太多了.你也不好搜索.放在idea.用ctrl加左键.直接就跳过去了.
ok关键信息都拿到了.接下来就是模拟了.
模拟部分就是找不同呗.首先先弄个正确的请求.就是浏览器发起的那个.通过body的大小.其实也可以直接去看.这个就是正确的.错误的是16.然后和手机发起的去比对.手机的少一些.经过尝试后.其中在header中有2个重要的信息一个是cookie和Referer这里没有的话.就会返回error.当然前提是body的参数要正确.这个用网页请求的那个行了.前面说过.里面的时间不会过期.可以一直用.其实http的这些header的检测都不是特别的可靠.都是可以伪造的.接下来让手机的发起的请求和浏览器一样就行了.把这两个参数补上.
看了看代码.在这个位置设置信息.于是加了个map用来传入header信息.额.....写完后才发现我说的那个必要信息上面就有.....
一运行.结果就好了........好了.我还在想会不会还有些别的坑.结果就好了...我把那个body被转义的地方改了下.盐值之前就替换好了.
也不知道这个作者是怎么想的.要对body转义.要转也是我在外面转吧.你在里面一转.等于号也被你弄没了......
13.结语
说实话那个有道的那个.我还说要花点时间呢.没想到下一步就是成功了.
通过这个hello word的安卓程序.发现安卓的内容不是特别的多.和其它语言也有相通的地方.UI和网络请求.做过winform的会眼熟.sql数据和安卓后面的代码做过java的肯定眼熟.至于控件的属性.这个做过前端和winform都可以猜事件.httpHelper.这个后台语言都会遇到这个.c#.java.还有有道最后返回的数据JSON几乎就是通用的文本传输协议了.所以也不是什么大问题.然后这其中的主线就是HTTP协议 这个才是融会贯通的主线.里面的requestHeader,requestBody.这个是重点.还有Cookie.要说模拟请求.一定绕不过去就是这个.cookie的domain,那个域名下面的.path.该域名下面那个路径要用.一般用/ .表示所有的路径都用.还有就是过期时间了.剩下几个header属性.需要注意Content-Type.表示我传的数据格式是什么.大家可以观察普通的post请求和上传文件的时候.这个是不一样的.还有Accept表示我想什么样的数据.不过一般不用理会.spring mvc在某些情况下会有bug.
这个app剩下就是查询SQLite数据.做一下单词匹配规则.然后在抓一些英文的文章吧.可能是这些.不过说实话.安卓真的只是一个界面的承载,这后面的东西和安卓相关的真的感觉不会太多.
我就是后台不精通.我就是不只写接口.我就是样样都会.样样都不行.
自学安卓练习作品单词APP(1)-安卓的hello word与有道字典防爬虫破解的更多相关文章
- 应用在安卓和ios端APP的证件识别
移动端证件识别智能图文处理,是利用OCR识别技术,通过手机拍摄身份证图像或者从手机相册中加载证件图像,过滤身份证的背景底纹干扰,自动分析证件各文字进行字符切分.识别,最后将识别结果按姓名.地址.民族. ...
- 只写Python一遍代码,就可以同时生成安卓及IOS的APP,真优秀
前言: 用Python写安卓APP肯定不是最好的选择,但是肯定是一个很偷懒的选择 我们使用kivy开发安卓APP,Kivy是一套专门用于跨平台快速应用开发的开源框架,使用Python和Cython编写 ...
- 合肥 专业做APP(安卓,ios) 微信公共平台
合肥 专业做APP(安卓,ios) 微信公共平台 电话:15715696592
- [安卓基础] 004.运行app
运行你的app 这篇课程会教你: 1.如何在设备上运行你的app. 2.如何在模拟器上运行你的app. 当然,在学习之前,你还需要知道: 1.如何使用设备. 2.如何使用模拟器. 3.管理你的项目. ...
- fiddler抓包+安卓机 完成手机app抓包的配置 遇到的一些问题
fiddler抓包+安卓模拟器完成手机app抓包的配置:fiddler抓包+雷电模拟器 完成手机app抓包的配置 其实在安卓真机上弄比在虚拟机上弄更麻烦一点,它们的步骤都差不多一样,就是在安卓真机上弄 ...
- Unity实现相似于安卓原生项目的点击安卓返回button回到前一页的功能
本章博主和大家一起讨论下Unity怎么实现类似安卓原生项目,点击安卓返回button实现返回到前一个页面的功能. 1.定义一个泛型用于响应安卓的返回button public static List& ...
- 基于百词斩和扇贝单词的背单词APP软件测试
概述 背单词APP是非常受大学生青睐的手机应用,但它的发展尚未成熟,存在一些缺陷.我们决定深入地分析一组典型的背单词APP:百词斩(A产品).扇贝单词(B产品),寻找当前背单词APP中的提升空间.下面 ...
- 【阿里聚安全·安全周刊】女主换脸人工合成小电影|伊朗间谍APP苹果安卓皆中招
本周的七个关键词: 人工智能 丨 HTTP链接=不安全链接 丨 滑动验证码 丨 伊朗间谍APP 丨 加密挖矿 丨 Android应用测试速查表 丨 黑客销售签名证书 -1- [人工智能]女主换 ...
- APP公布到应用市场(苹果APP STORE+安卓各大应用市场)
注意事项 1.应用要签名,为了以后可以顺利更新应用.要保持每次的签名一致,所以要妥善保管好签名数据. 2.进行公布測试,最好有个检查表,每次公布的时候进行核查. 苹果APP STORE 一.证书的导出 ...
随机推荐
- logstash结合es,日志收集
1.下载好logstash后,解压目录 2.进入bin目录,新建文件 logstash_default.conf input { tcp { port => 4560 codec => & ...
- influxdb 端口、数据结构、写数据
InfluxDB 是一个开源,分布式,时间序列,事件,可度量和无外部依赖的数据库. InfluxDB有三大特性: Time Series (时间序列):你可以使用与时间有关的相关函数(如最大,最小,求 ...
- bnu Game 博弈。
Game Time Limit: 10000ms Case Time Limit: 10000ms Memory Limit: 65536KB 64-bit integer IO format: ...
- [Java反射基础三]方法反射的基本操作
本文接上文“获取类的信息”,利用反射(invoke)来获取一个类中的方法来执行. 1.定义一个类,包含三个名称相同,参数不同的方法 class A{ public void print(){ Syst ...
- spring和jdbc结合的一个小例子
1.新建一个SpringJdbc的maven项目. 2.引入需要的jar包的依赖 <span style="white-space:pre"> </span> ...
- 爬虫之lxml - etree - xpath的使用
# 解析原理: # - 获取页面源码数据 # - 实例化一个etree对象,并且将页面源码数据加载到该对象中 # - 调用该对象的xpath方法进行指定标签定位 # - xpath函数必须结合着xpa ...
- Found 1 slaves: Use of uninitialized value in printf at /usr/local/percona-toolkit/bin/pt-online-schema-change line 8489
1. problem description: as the title show, i miss the first problem using pt-online-schema-change to ...
- COGS 有标号的二分图计数系列
其实这三道题都是不错的……(虽然感觉第三题略套路了……) 分别写一下做法好了…… COGS2392 有标号的二分图计数 I 这个就很简单了,Noip难度. 显然可以直接认为黑点和白点分别位于二分图两侧 ...
- arcgis 地理国情建库软件已完成
arcgis 地理国情软件已完成: 1.创建1:25000(或则其他比例尺)国家2000坐标系接合表 2.按照地理国情普查数据库标准,创建标准数据库 3.外业调查工作底图制作 4.矢量和影像数据批量裁 ...
- 字符数字转换 atoi 与 strtol
原文:http://www.cnblogs.com/JefferyZhou/archive/2010/07/01/1769555.html 在很多时候我们都很清楚 atoX 系列函数: atoi , ...