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
转载于:https://blog.51cto.com/zlyang/1728256
linux curl模拟登录网页相关推荐
- PHP curl 模拟登录并获取数据
cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信 ...
- php读取cookie文件,PHP读取CURL模拟登录时生成Cookie文件的方法,_PHP教程
PHP读取CURL模拟登录时生成Cookie文件的方法, 本文实例讲述了PHP读取CURL模拟登录时生成Cookie文件的方法.分享给大家供大家参考.具体实现方法如下: 在使用PHP中的CURL模拟登 ...
- curl php 百度,php curl 模拟登录百度主页
php curl 模拟登录百度首页 本帖最后由 STONEWP 于 2012-03-29 13:43:04 编辑 代码如下: $url = "https://passport.baidu.c ...
- 微信群控系统制作系列一——java模拟登录网页版微信
PS:很多人咨询我怎么做手机群控系统,因此我开了个制作群控系统的系列,准备分五期讲解群控系统的制作.前两篇是基础内容. 今天做个简单的java模拟登录网页版微信. 既然要做模拟登录,那么我们一定要了解 ...
- 【php】curl模拟登录抓取页面信息
[php]curl模拟登录抓取页面信息 在本项目中,使用php抓取四川大学综合教务网站的成绩信息.课程信息以及登录用户的基本资料,解析数据并存入数据库,以实现对所得信息的进一步分析,并呈现给用户. 本 ...
- php 模拟登录淘宝taobao阿里妈妈|模拟登录淘宝联盟|curl模拟登录淘宝|模拟登陆淘宝采集数据
php 模拟登录淘宝taobao阿里妈妈|模拟登录淘宝联盟|curl模拟登录淘宝|模拟登陆淘宝采集数据 在很多项目中我们可能要采集淘宝会员中心的一些数据.但是程序采集的时候会员中心必须是登录的,这里我 ...
- curl模拟登录新浪微博
curl模拟登录新浪微博 这几天要做个获取新浪微博@我的信息, 又不用第三方登录,所以只能通过模拟登录来获取信息,研究的一下发现直接模拟登录微博比较困难,验证的算法比较复杂,于是绕道通过登录新浪通行证 ...
- php curl加密获取数据,PHP利用Curl模拟登录并获取数据例子
几乎所有的程序员来模仿用户登录或抓取数据都会使用到curl函数,下面我来给各位介绍利用curl函数实现登录并抓取数据,希望下面例子对各位有帮助. PHP的curl()在抓取网页的效率方面是比较高的,而 ...
- php 使用curl模拟登录discuz以及模拟发帖
<?php $discuz_url = 'http://127.0.0.1/discuz/';//论坛地址 $login_url = $discuz_url .'logging.php?acti ...
最新文章
- POJ1088(滑雪)
- Java项目:网上图书商城系统(java+SSM+Jsp+MySQL+Redis+JWT+Shiro+RabbitMQ+EasyUI)
- hadoop分布式集群搭建
- css加载会造成阻塞吗?
- 判断一个点是否在多边形区域内--C算法
- Qt for Android Splash启动页最简单延时关闭
- Windows上的Java线程CPU分析
- linux 圣经软件,Ubuntu(Linux)下好用的中文圣经
- 数据分析如何揭示冠状病毒的真相?
- 申请退款微信php,三:申请退款
- mysql forname_关于Class.forName(“com.mysql.jdbc.Driver”)
- inline,block 和 inline-block 的区别
- 动软代码生成器连不上高版本(8.0+)的解决方法
- 大一python选择题题库及答案_万维考试系统选择题题库(含参考 答案).pdf
- linux命令批量修改文件名称
- ECharts-旭日图(Sunburst)带时间轴
- oracle 本地数据库卸载,Oracle数据库卸载
- Win11便笺不工作怎么办?Win11便笺停止工作解决办法
- 使用ArcCatalog、ArcSDE连接Oracle
- 收藏!图解JVM经典五十问,这下面试稳了!