yun 发表于 2016-10-21 20:09:59

curl模拟登录网页(定位原创发布)

本帖最后由 yun 于 2016-10-21 20:17 编辑

首先声明:此测试,本人亲测成功,可用!

目地:了解curl命令的使用,以及用途,功能的强大

有时在批量抓取网站页面内容时,是需要处于登录状态的,否则无法获取。curl这个强大的工具可以完成这个工作。之前最好也先了解一下http POST方法,网站登录大都是用这个办法。

这里是以百度为例(下面是我个人的测试):

1、先保存用户变量
[*]# ACCOUNT=qasxc5  (这里的qasxc5是我的百度用户名)
[*]# PASS=cnblackhat  (这里的cnblackhat换成你的百度用户密码)
[*]# echo $ACCOUNT
[*]

复制代码
2、访问百度,取得cookie,保存到cookies. 查看文件可知cookie名为BAIDUID
[*]# curl -c cookies www.baidu.com
[*]以上命令回车会出现一大堆代码信息,不要去理会,与此同时,在你的执行目录下会生成一个文件名为:cookies

复制代码
以下是cookies的内容:



3、带着cookie访问这个地址,得到$TOKEN$
[*]# TOKEN=$(curl -b cookies -sS "https://passport.baidu.com/v2/api/?getapi&tpl=mn&apiver=v3&class=login&tt=$(date +%s)&logintype=dialogLogin" | tr "'" '"' | json_pp -t dumper -json_opt pretty | grep token | cut -d\' -f4)
[*]# echo $?
[*]0
[*]执行以上命令,执行之后,检测命令执行成功,返回状态是0
[*]

复制代码
以上你运行第一条命令你可能会遇到错误:-bash: json_pp command not found
json_pp依赖perl安装包,你下载个perl安装包安装即可,yum直接安装不行,已测过。

perl安装包下载地址(版本是5.16.3):



首先声明:此测试,本人亲测成功,可用!

目地:了解curl命令的使用,以及用途,功能的强大

有时在批量抓取网站页面内容时,是需要处于登录状态的,否则无法获取。curl这个强大的工具可以完成这个工作。之前最好也先了解一下http POST方法,网站登录大都是用这个办法。

这里是以百度为例(下面是我个人的测试):

1、先保存用户变量
[*]# ACCOUNT=qasxc5  (这里的qasxc5是我的百度用户名)
[*]# PASS=cnblackhat  (这里的cnblackhat换成你的百度用户密码)
[*]# echo $ACCOUNT
[*]

复制代码
2、访问百度,取得cookie,保存到cookies. 查看文件可知cookie名为BAIDUID
[*]# curl -c cookies www.baidu.com
[*]以上命令回车会出现一大堆代码信息,不要去理会,与此同时,在你的执行目录下会生成一个文件名为:cookies

复制代码
以下是cookies的内容:



3、带着cookie访问这个地址,得到$TOKEN$
[*]# TOKEN=$(curl -b cookies -sS "https://passport.baidu.com/v2/api/?getapi&tpl=mn&apiver=v3&class=login&tt=$(date +%s)&logintype=dialogLogin" | tr "'" '"' | json_pp -t dumper -json_opt pretty | grep token | cut -d\' -f4)
[*]# echo $?
[*]0
[*]执行以上命令,执行之后,检测命令执行成功,返回状态是0
[*]

复制代码
以上你运行第一条命令你可能会遇到错误:-bash: json_pp command not found
json_pp依赖perl安装包,你下载个perl安装包安装即可,yum直接安装不行,已测过。

perl安装包下载地址(版本是5.16.3):
**** Hidden Message *****


perl安装步骤:
[*]# ./configure.gnu
[*]# make
[*]# make test
[*]# make install

复制代码
安装完之后,在执行前面那条命令就不会报错了。


4、带着cookie , $TOKEN$对这个地址访问
[*]# curl -b cookies -c cookies https://passport.baidu.com/v2/api/?logincheck&token=$TOKEN[        DISCUZ_CODE_4        ]amp;tpl=mn&apiver=v3&tt=$(date +%s)&username=$ACCOUNT&isphone=false
[*] 20919
[*] 20920
[*] 20921
[*] 20922
[*] 20923
[*] 20924
[*]# ({"errno":0,"codestring":null,"index":null})
[*]   Done                    curl -b cookies -c cookies https://passport.baidu.com/v2/api/?logincheck
[*]   Done                    token=$TOKEN$
[*]   Done                    tpl=mn
[*]   Done                    apiver=v3
[*]-  Done                    tt=$(date +%s)
[*]+  Done                    username=$ACCOUNT
[*]#

复制代码
返回下面内容:
({"errno":0,"codestring":null,"index":null})

(#curl -b 和 -c 参数同时使用表示当前目录下的cookies文件读取 cookie 数据,如果接收新的到的 cookie,就写到同一个文件里去


5、使用用户信息登陆百度网盘:
[*]# curl -b cookies -c cookies --compressed -sS 'https://passport.baidu.com/v2/api/?login' -H 'Content-Type: application/x-www-form-urlencoded' --data "staticpage=http%3A%2F%2Fpan.baidu.com%2Fres%2Fstatic%2Fthirdparty%2Fpass_v3_jump.html&charset=utf-8&token=$TOKEN&tpl=mn&apiver=v3&tt=$(date +%s083)&codestring=&safeflg=0&u=http%3A%2F%2Fpan.baidu.com%2F&isPhone=false&quick_user=0&logintype=basicLogin&username=$ACCOUNT&password=$PASS&verifycode=&mem_pass=on&ppui_logintime=57495&callback=parent.bd__pcbs__ax1ysj" | grep -F err_no
[*]

复制代码
会返回以下信息:


我这里错误码显示为0,表示成功,可能是别的值



6、登陆成功之后就可以调用网盘 API了,验证是否成功

6.1   获取容量:
[*]<span style="line-height: 1.5;">#</span><span style="line-height: 1.5;"> </span>curl -b cookies -c cookies 'http://pan.baidu.com/api/quota'

复制代码
返回如下信息:


信息解释:
used:1200946201297       (容量使用了多少)
total:2209223802880       (总共容量为多大)


6.2   列出根目录下的文件信息:
[*]<span style="line-height: 1.5;">#</span><span style="line-height: 1.5;"> </span>curl -b cookies -c cookies 'http://pan.baidu.com/api/list' | json_pp

复制代码
以下是我网盘里面的内容(如下,内容比较多,就不一一列举了):







6.3   当然也可以针对指定目录列出内容:
[*]<span style="line-height: 1.5;">#</span><span style="line-height: 1.5;"> </span>curl -b cookies -c cookies 'http://pan.baidu.com/api/list?dir=/黑帽远控入门教程' | json_pp

复制代码
以下是我根目录下面的目录:比如这里的“黑帽远控入门教程”目录,内容如下:





6.4   这里也可以新建目录
[*]<span style="line-height: 1.5;">#</span><span style="line-height: 1.5;"> </span>curl -b cookies -c cookies 'http://pan.baidu.com/api/create' -F path=/黑帽官网bbs.cnblackhat.com -F isdir=1 -F size= -F block_list='[]' -F method=post

复制代码
返回如下信息(以下涉及到字符编码问题,中文在平台上不显示,中文已被替换,但在下面检查的时候,是存在的):


这里我新建的目录是“黑帽官网bbs.cnblackhat.com”
到浏览器上查看一下,目录成功创建与否:





附注:
[*]第二步中取得TOKEN时,要解析返回的json数据,可以不用json_pp, 也可以用别的工具,网上可以搜到不少,作者原文用的是jshon
[*]第四步登录中的用户信息,各字段如下(参考原作):staticpage:http://www.baidu.com/cache/user/html/v3Jump.html // baidu登录后跳转的地址
charset:UTF-8 // 编码字符集
token:$TOKEN$
tpl:mn
apiver:v3 //apiver 的值是固定的 API的版本号
tt:当前时间
codestring:留空
isPhone:false //如果用手机号码登录则ture 否则为 false
safeflg:0
u:http://www.baidu.com/
quick_user:0
usernamelogin:1
splogin:rate
username:用户名
password:密码明文
verifycode: //验证码,如果没要求验证码,就为空
mem_pass:on //记住密码
ppui_logintime:5000 //是一些登录用时间的,给个7000~10000的随机数就好了
callback:parent.bdpcbsoa36qm


ckey 发表于 2016-10-21 21:39:46

谢谢分享
页: [1]
查看完整版本: curl模拟登录网页(定位原创发布)