看到网上的滚动英语——但是总会有人想要所有的数据的
今天看到某网页上有类似每日英语的小功能,觉得其中的英语很应该看一看。可是那英语8秒才更新一下。我可没有这耐心等它更新完啊。直接看他的源代码。知道是用JavaScript在后面不断地更新数据。查看代码,其中有一个english.js,打开看看。其中有一个代码是这样的。
this.queryDB=function (e){
o.url="Plugins/EnglishXML/getEnglish.asp?s="+Math.random()
o.Open();
}
好了,什么都知道了。直接在浏览器上输入网址,其返回结果如下所示:
<querys>
<English>
<![CDATA["In Brazil,many ancient forests are very well preserves."]]>
</English>
<Chinese>
<![CDATA[ 在巴西,古老的森林得到了很好的保护。]]>
</Chinese>
</querys>
从服务器返回的是个纯XML文件,而且理所当然的只有1句。但是我想得到全部的!本来想找出其数据文件的位置。可是看来看就这么个ASP网页,自己也没有学过注入攻击的手段。只能用最笨的暴力方式——刷!当然肯定不能用浏览器刷了。
下载下来还要,看起来方便才好。所以就决定写个Client去刷。程序很简单两个小时也就稿定了,界面如下:
看图应该就可以看出来,我刷了3.3万次。刷到后来,有近5000次刷出来的东西都是之前刷到过的,就停下来了。(其实还有8条数据没有刷到)
刷的时候,想到一个问题。设总共有n个句子,我要刷多少次,才能保证已经刷完所有句子的概率大于x%?因为理论上,无论我刷多少次都不能保证我已经刷到了所有的句子。
刷出来的句子被保存成了XML文件。看XML文件不方便,可以用程序打开(功能没有实现,给XmlDataProvider设置Source属性即可)。程序上没有加排序、查找之类的功能。因为根本没有必要,所有的数据都可以从这里下载到,是个Access数据库……然后你想干什么都可以。写这个程序只是怕最近没有用到技术生疏了。比如XML、Encoding之类。
PS:程序仅供学习之用,请勿用于其它目的。直接编译需要使用Visual Studio 2010。