有时在批量抓取网站页面内容时,是需要处于登录状态的,否则无法获取。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了,验证是否成功

  1. 获取容量:

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

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

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

    $ 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

  3. 建立目录:

    $ 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模拟登录网页相关推荐

  1. PHP curl 模拟登录并获取数据

    cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数,开发者可以从PHP手册中获取更多关于cURL信 ...

  2. php读取cookie文件,PHP读取CURL模拟登录时生成Cookie文件的方法,_PHP教程

    PHP读取CURL模拟登录时生成Cookie文件的方法, 本文实例讲述了PHP读取CURL模拟登录时生成Cookie文件的方法.分享给大家供大家参考.具体实现方法如下: 在使用PHP中的CURL模拟登 ...

  3. curl php 百度,php curl 模拟登录百度主页

    php curl 模拟登录百度首页 本帖最后由 STONEWP 于 2012-03-29 13:43:04 编辑 代码如下: $url = "https://passport.baidu.c ...

  4. 微信群控系统制作系列一——java模拟登录网页版微信

    PS:很多人咨询我怎么做手机群控系统,因此我开了个制作群控系统的系列,准备分五期讲解群控系统的制作.前两篇是基础内容. 今天做个简单的java模拟登录网页版微信. 既然要做模拟登录,那么我们一定要了解 ...

  5. 【php】curl模拟登录抓取页面信息

    [php]curl模拟登录抓取页面信息 在本项目中,使用php抓取四川大学综合教务网站的成绩信息.课程信息以及登录用户的基本资料,解析数据并存入数据库,以实现对所得信息的进一步分析,并呈现给用户. 本 ...

  6. php 模拟登录淘宝taobao阿里妈妈|模拟登录淘宝联盟|curl模拟登录淘宝|模拟登陆淘宝采集数据

    php 模拟登录淘宝taobao阿里妈妈|模拟登录淘宝联盟|curl模拟登录淘宝|模拟登陆淘宝采集数据 在很多项目中我们可能要采集淘宝会员中心的一些数据.但是程序采集的时候会员中心必须是登录的,这里我 ...

  7. curl模拟登录新浪微博

    curl模拟登录新浪微博 这几天要做个获取新浪微博@我的信息, 又不用第三方登录,所以只能通过模拟登录来获取信息,研究的一下发现直接模拟登录微博比较困难,验证的算法比较复杂,于是绕道通过登录新浪通行证 ...

  8. php curl加密获取数据,PHP利用Curl模拟登录并获取数据例子

    几乎所有的程序员来模仿用户登录或抓取数据都会使用到curl函数,下面我来给各位介绍利用curl函数实现登录并抓取数据,希望下面例子对各位有帮助. PHP的curl()在抓取网页的效率方面是比较高的,而 ...

  9. php 使用curl模拟登录discuz以及模拟发帖

    <?php $discuz_url = 'http://127.0.0.1/discuz/';//论坛地址 $login_url = $discuz_url .'logging.php?acti ...

最新文章

  1. POJ1088(滑雪)
  2. Java项目:网上图书商城系统(java+SSM+Jsp+MySQL+Redis+JWT+Shiro+RabbitMQ+EasyUI)
  3. hadoop分布式集群搭建
  4. css加载会造成阻塞吗?
  5. 判断一个点是否在多边形区域内--C算法
  6. Qt for Android Splash启动页最简单延时关闭
  7. Windows上的Java线程CPU分析
  8. linux 圣经软件,Ubuntu(Linux)下好用的中文圣经
  9. 数据分析如何揭示冠状病毒的真相?
  10. 申请退款微信php,三:申请退款
  11. mysql forname_关于Class.forName(“com.mysql.jdbc.Driver”)
  12. inline,block 和 inline-block 的区别
  13. 动软代码生成器连不上高版本(8.0+)的解决方法
  14. 大一python选择题题库及答案_万维考试系统选择题题库(含参考 答案).pdf
  15. linux命令批量修改文件名称
  16. ECharts-旭日图(Sunburst)带时间轴
  17. oracle 本地数据库卸载,Oracle数据库卸载
  18. Win11便笺不工作怎么办?Win11便笺停止工作解决办法
  19. 使用ArcCatalog、ArcSDE连接Oracle
  20. 收藏!图解JVM经典五十问,这下面试稳了!

热门文章

  1. Redis多实例及主从搭建
  2. loadrunner性能测试步骤
  3. 关于Java中的随机数产生
  4. java中filter的用法
  5. tensorflow 模型小型化_模型小型化
  6. Linux网络编程——黑马程序员笔记
  7. 异步通知实验(信号)
  8. Java web小项目_个人主页(2)—— 边缘加速原理与实现
  9. java线程池 锁_java多线程——锁
  10. java项目皮肤包_java swing项目皮肤包+使用方法说明