上一篇使用shell+curl的方式完成了登陆百度空间并发表文章。但是奈何shell脚本对大批量文字的处理太弱,因此脚本显得鸡肋。
而本篇则完成一个实际可用的脚本程序:115网盘自动摇一摇脚本。
115网盘简介
115网盘容量和速度都算不错的。注册送15G,然后可通过每天摇一摇等方式获得容量。
免费会员每天可以摇一次,可以获得几十M到一百多M的空间,和几百“雨露”。雨露可用于升级,升级后增加空间,但是貌似现在没有了。
可以在淘宝上搜一下115账号的价格。
(注:当初写这个脚本的时候,还在网盘大战前后,如今的115早已不如当前,摇一摇这个功能早已消失。)
工具使用
登陆过程我们仍然使用Developer Tools分析。
简单的办法是使用谷歌官方的chrome浏览器或Firefox+Firebug。
登陆过程
登陆,使用Developer Tools抓包,很容易看到第一个POST包。
1、POST地址
https://passport.115.com/?ac=login
2、三部分数据
- Request Headers,没特殊需要注意的字段。
- Query String Parameters,没用。
- Form Data,有两个数据:用户名、密码,字段名分别为login[account]、login[passwd],参数明文。
3、curl脚本
伪造User-Agent,伪装来源页面,登陆保存cookie:#username/passwd are the parameters of this script
username=$1
passwd=$2
#save to log
date>>yaoyao.log
echo Log $1>>yaoyao.log
#login post
curl -s -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" -o 1151.html -D 115cookie001.txt http://www.115.com/
curl -s -L -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" \
-e http://www.115.com/ -o 1152.html -D 115cookie002.txt -b 115cookie001.txt \
--data-urlencode back=http://www.115.com \
--data-urlencode goto=http://115.com \
--data-urlencode login[account]=$username \
--data-urlencode login[passwd]=$passwd \
'http://passport.115.com/?ac=login'
为了更逼真,我们先访问了下首页,完整模仿实际用户行为。
登陆成功与否不在此处检测,原因见下节。
摇一摇过程
1、摇一摇抓包分析
在“网盘”页面下,点击摇一摇,摇成功后抓包分析。
很快发现摇一摇的GET数据包。
2、字段分析
GET网址为:http://115.com/?ct=ajax_user&ac=pick_space&token=dfcce64ebe71051a732d7943068ab***&_=1345093324***
多次试验发现,URL中有两个变化的参数,token和。没有其它特殊字段。
token和字段,按上篇文章思路,我们先考虑这两个字段没有实际意义的情况。
3、curl脚本
curl -s -L -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" \ |
成功后会有跳转,所有我们使用了-L选项自动跟踪跳转。
token和_字段处,填入格式相同的随机值,打开1153.html发现失败。
4、寻找token字段
同上篇相同思路,从后向前寻找。或者抓包,然后搜索token值。
1)最终发现在GET网页http://115.com/?ct=file&ac=userfile&aid=1&cid=0&tpl=list_pg&limit=35的Response
里有:
<script type="text/javascript"> window["INDEX_HOME_DATA"] = {take_token: '164d32f6fc1e668c0769eff1235e83ff',is_take: Number('1') }; |
2)我们使用curl脚本:
curl -s -A "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" \ |
cat 1153.html|grep token即可看到token字段。
3)增加curl语句GET此页面提取token即可。
与上文POST摇一摇的代码合并后脚本如下:
#get token |
测试成功,证明_字段没有实际作用。估计是个时间戳之类的,服务器并不对其正确唯一与否做出很严格的校验。
我们只需要在获得token后检验token是否为空即可,不需要在登陆后检测登陆是否成功。因为即使登陆成功后获得token识别,脚本也会终止。
后续处理
1、结果处理
摇一摇POST页面http://115.com/?ct=ajax_user&ac=pick_space&token=164d32f6fc1e668c0769eff1235e8***&_=1345094656***
得到的结果中,有三个字段有意义:
- picked:摇一摇获得空间数
- total_size:总空间数
- exp:获得的雨露数
提取脚本如下:
#get the result |
结果保存在日志中。我们只需要查看日志即可判断成功与否。
2、资源清理
脚本如下:
rm -f 1151.html 1152.html 1153.html 1154.html |
除115cookie002.txt之外,其余的cookie其实不用保存。
稳妥的办法是在开头结尾都添加资源清理语句。
3、容错处理
脚本中没有做太完备的容错处理。
因为在网络好的情况下,一般只会一次成功,失败的概率很小。没必要添加逻辑复杂的容错处理。
Linux设置自动执行
可设置crotab自动执行。
如vim /etc/crontab
添加如下字段:
30 5 * * * root bash yaoyao.sh username password |
表示每天5:30以root用户自动执行”bash yaoyao.sh username password“。
总结
完整的脚本请下载yaoyao.sh
使用方法:
bash yaoyao.sh username password |
使用bash执行的原因是,其他shell可能有不支持的shell语法。
日志保存在yaoyao.log中。