实战:某文档在线导出工具,E语言下载器简易实现
本帖最后由 Crazy开发仔 于 2019-8-3 15:58 编辑测试网站:http://wenku.baiduvvv.com/
所用工具:E语言,FD(Fiddler,抓包神器),精易编程助手,notepad++(可选)
测试环境:win7 x64
测试人员:Crazy开发仔(以下简称:小C)
前情摘要
①如果不熟悉或者不懂E语言,请自行百度学习
②不懂FD,也可以找百度
③HTTP协议请自行百度学习,特别是GET、POST请求等
分析数据
一把梭哈就是干!!!首先打开FD,然后启动浏览器访问http://wenku.baiduvvv.com/,映入眼帘的是这个画面(画面太美,不忍直视)
接下来,小C大致浏览了一下页面内容,此在线导出工具主要是实现下载某文库的文档功能。废话不多说,本人没什么需要下载的文档,故使用页面上的一个文档地址来简单的做一下演示吧。
https://wenku.baidu.com/view/3e6d30b2fd0a79563c1e72bd.html
貌似是中学化学,回忆我的学习时光,化学里边就对CaO(氧化钙)记忆尤新,不要问我为什么,自己脑补。
将文档地址拷贝到网页地址框,姿势如下图:
小C选择,导出为pdf(随便选的),然后点击【下载】按钮。这个时候,你也不要闲着(说的就是你),看一下FD窗口。
一开始你可能看不懂,这是什么玩意。莫慌,跟着小C一起来撸。鼠标选中第一行
我们再来看一下右边的面板,详细数据面板。如图:
Headers代表请求头信息,红色圈部分代表这个请求为GET请求,再看后面的信息:
/ds.php?url=https%3A%2F%2Fwenku.baidu.com%2Fview%2F3e6d30b2fd0a79563c1e72bd.html&type=pdf&t=1564815056000&sign=d3addcff32062b3490a3f49983e9b93c
Url(蓝色):显然是经过url编码过的,通过精易编程助手解码之后是这个样子滴。
也就是说,那个url就是我们在地址框中输入的地址。
type(红色):是不是很熟悉,我们选择的格式就是pdf,那么你是不是可以举一反三呢?
t(绿色):很明显就是一个时间戳,不知道什么是时间戳,自行移步百度。
Sign:这个可以忽略,保持默认就可以。
分析完上面的内容之后,看下返回的内容是什么,如图:
JSON数据(什么?不知道json?自行移步百度),分析参数
code:返回请求的状态
f:文件名(随机的),数了一下大概32位,可能是随机md5,反正我们就认为它是一个文件名
h:这个不知道是什么值,可以略过
s:服务器ip和端口
至此,第一条数据分析完了,建议将返回上面的数据拷贝到notepad++中暂存,方便后面的分析对比。
接下来分析第二条数据,前面的已经讲过,套路一样,自己分析。我们直接看Headers部分:
也是个GET请求,看一下详细数据吧。
/wkc.php?url=https%3A%2F%2Fwenku.baidu.com%2Fview%2F3e6d30b2fd0a79563c1e72bd.html&type=pdf&t=1564815056000&sign=d3addcff32062b3490a3f49983e9b93c&f=1c54b323ae4fcaf5e7b02e0ccd56c9d3&h=3909524402&btype=down
对比之前的数据,看看有什么不同的地方。
不难发现,第一次请求返回的json数据中部分字段的值,要作为第二次请求的参数。讲到这里,原理大致就清楚了。
撸代码
打开E,新建工程,随便拖个按钮,具体代码如下:
用到了精易模块7.11,获取文件名和时间戳,这个不用讲吧。
文件名,我这里偷懒用了 文本_取出中间文本()。
时间戳,直接使用 时间_取随机时间戳 ()。
下载文件 直接用 文件_下载()。
小C只是简单做演示,至于是否要扩展成批量下载器,大家自行脑补和编写。
调试篇
点击保存,就可以下载完成。教程结束,希望能帮助到你。大神勿喷!!! 感谢分享 Crazy开发仔 发表于 2019-8-8 11:42
自己定义一下,文本常量
能看明白吗?? 谢谢 老师分享 感谢分享 get到了新技能,谢谢楼主贡献这么详细的技术贴 飞豆用得好,监狱蹲到老:Dweeqw hill_king 发表于 2019-8-3 17:22
飞豆用得好,监狱蹲到老
what?难道不是牢底坐穿吗? 这个厉害了,学习了