linux 登录网页,linux curl模拟登录网页

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

本文基本上参考这篇文章,来自依云's Blog,是archlinux中文论坛的百合仙子大大写的,他参考的gihub上一个百度网盘资源进行访问的小程序。我只是根据理解改了几个小地方,转载请注明出处

以百度为例 先保存用户变量$ ACCOUNT=百度帐号$ PASS=帐号的密码

第一步

访问百度,取得cookie,保存到cookies. 查看文件可知cookie名为BAIDUID$ curl -c cookies www.baidu.com

(#可以加 -sS 安静模式,不显示进度,其中S表示只显示错误;-o /dev/null 将眼花的输出扔掉)

第二步

带着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)

第三步

带着cookie , $TOKEN$对这个地址访问$curl -b cookies -c cookies https://passport.baidu.com/v2/api/?logincheck&token=$TOKEN$&tpl=mn&apiver=v3&tt=$(date +%s)&username=$ACCOUNT&isphone=false

返回下面内容{"errInfo":{ "no": "0" }, "data": { "codeString" : "", "vcodetype" : "" }}

要是让输入验证码的话就哭了…….但第一次登录一般没问题 (#curl -b 和 -c 参数同时使用表示当前目录下的cookies文件读取 cookie 数据,如果接收新的到的 cookie,就写到同一个文件里去

第四步

使用用户信息登陆: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,表示成功,可能是别的值

第五步

登陆成功之后就可以调用网盘 API了,验证是否成功获取容量:

$curl -b cookies -c cookies 'http://pan.baidu.com/api/quota' 返回:

{“errno”:0,“used”:0,“total”:5368709120,“request_id”:4959306489643694116}

列出根目录下的文件信息:

$ curl -b cookies -c cookies 'http://pan.baidu.com/api/list' | json_pp $ curl -b cookies -c cookies 'http://pan.baidu.com/api/list?dir=/test' | json_pp

建立目录:

$ curl -b cookies -c cookies 'http://pan.baidu.com/api/create' -F path=/测试curl -F isdir=1 -F size= -F block_list='[]' -F method=post

可看到返回中有这几行:"path" : "/测试curl",     "isdir" : 1,     "size" : 0,     "fs_id" : 1083516221491878,     "category" : 6,     "server_filename" : "测试curl",

附注:第二步中取得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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值