最近发现了一个“小气”的学习站点。网站内容竟然不让复制,这样搞,怎么让我们考试的时候弄小抄,难不成要一个字一个字的去打不成。所幸的是咱是搞技术的,这点问题还是难不倒的,你不让复制刚好,这下我还懒得麻烦呢。直接搞个脚本把这一课的内容全扒取下来看岂不更方便。

说搞就搞,先是看源代码。不过网页禁止了右键,点右键有如下提示:

pa1

这个倒不难,查看网页源代码的方法太多了,不知道的可以网上找找吧。查看到了,源代码,发现没找页面中的内容未在源代码中显示。接着拿出httpwatch抓包分析,在其中的另外一个链接里找到页面源代码,不过源代码是加密过的。如下:

pa2

不过这个加密有点菜,里面已经明明白的写着是base64加密了。这个解码并不难,linux系统自带的base64工具就能完成:

 1[root@web20 php]# base64 --help
 2Usage: base64 [OPTION] [FILE]
 3Base64 encode or decode FILE, or standard input, to standard output.
 4  -w, --wrap=COLS       Wrap encoded lines after COLS character (default 76).
 5                        Use 0 to disable line wrapping.
 6  -d, --decode          Decode data.
 7  -i, --ignore-garbage  When decoding, ignore non-alphabet characters.
 8      --help            Display this help and exit.
 9      --version         Output version information and exit.
10如果[文件]缺省,或者[文件]为 - ,则读取标准输入。
11The data are encoded as described for the base64 alphabet in RFC 3548.
12Decoding require compliant input by default, use --ignore-garbage to
13attempt to recover from non-alphabet characters (such as newlines) in
14the encoded stream.

base64 -d 文件名就行了。不过解码后发现,解出的结果是url化的。得到的结果如下:

1%20%20%5B%E8%AF%86%E8%AE%B0%5D%E4%BC%9A%E8%AE%A1%E7%9A%84%E6%B6%B5%E4%B9%89%E6%98%AF%E4%BB%80%E4%B9%88%EF%20%20

看到这个结果是不是又犯难了,其时这个时候应该感到高兴才是。因为结果已经出来一半了。这个得出的结果不正是和在url里进行汉字搜索得到的的URL结果一样吗?

如:我在hao123的百度搜索里找”测试”,得到的页面url是 http://www.baidu.com/s?word=%B2%E2%CA%D4&tn=sitehao123

测试两个汉字在url中就变成了%B2%E2%CA%D4 ,知道原理了。解码还不是很简单。php中有个函数urldecode就是干这个用的。下面列出来我全部的url代码:

 1<?php
 2for ($i=18291; $i<=18788 ;$i++ ){
 3$content = file_get_contents("http://www.XXX.com/test.php?wiki_id=".$i);
 4//echo $content;
 5$spwt1=explode("问题:",$content);
 6$spwt2=explode('));<',$spwt1[1]);
 7$spdn=explode("答案:",$spwt2[1]);
 8//echo $spwt2[0];
 9//echo $spdn[1];
10preg_match('/base64decode("(.*?)"/',$spwt2[0],$matchesw);
11$wen=urldecode(base64_decode($matchesw[1]));
12echo $wen;
13echo "n";
14echo "n";
15preg_match('/base64decode("(.*?)"/',$spdn[1],$matchesd);
16$da=urldecode(base64_decode($matchesd[1]));
17echo $da;}
18?>

此外为了我出于对那个站点的知识产权的保护,把他的URL给换成了http://www.XXX.com/test.php 。(毕竟人家也是一点点做上去的也不容易。)刚好我服务器上也有php环境,直接运行php test.php。结果非常喜人,一会儿功夫,这一课目的内容全出来了。

ok,放到word里再重新编辑下,打印出来看,多爽!