Guzzle 实现模拟登陆,抓取数据 (某网盘为例)

本文介绍如何使用Guzzle库模拟登录过程,包括获取验证码、处理隐藏域的input内容、cookie及验证码,实现自动登录并访问指定页面。通过实例演示了从请求验证码、提交登录信息到获取目标页面数据的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个适用于已经有账号和密码,需要拿到指定的数据。

整体过程是这样的

一.https://www.sojson.com/httpRequest/   使用这个网站模拟了一下整体的操作。发现了几个问题如要拿到的参数有

  1. 隐藏域的input 内容
  2. cookie
  3. 验证码                   

   隐藏的input 内容以及cookie,  我是通过F12查看的,然后记录在了里边,KEY VALUE形式

  验证码是在原网站查看的, 手动输入的。

然后通过sojson 去请求。进入了登陆页面。然后发现登陆页面有个跳转,也就是进去后他有个重定向,然后我又查看了对应的cookie ,根据这个cookie值去请求到了我想要的页面。然后根据这个cookie 可以访问到所有页面。

二、代码

 总体使用Guzzle。

1.请求验证码 保存到本地,并且拿到cookie,自定义一个表单。携带各种参数

   

<?php
        $res =$client->request("GET","验证码地址");
        
        $header = $res->getHeaders();
        //var_dump($header);
        $phpside = $header['Set-Cookie'][0];


        file_put_contents( "/1.png",$res->getBody());
        echo "
                <img src='/1.png'>
                <form action='http://www.a.com/index.php?m=User&a=logins' method='post'>
                <input type='hidden'value='{$phpside}' name='phpsessid'>
                <input type='text' name='very_code' value=''>
                <input type='submit' value='dl'>
                </form>
        ";

 

2.输入验证码,点击提交进入自己写的方法中(这里TP框架I函数接受参数)

<?php
      $code = I("very_code");
        $sessid = I("phpsessid");

        $client = new \GuzzleHttp\Client();
        $res = $client->request("POST", "http://xxxx/account.php", [
            'headers' => [
                'Cookie' => $sessid,
                'Content-Type'=>'application/x-www-form-urlencoded',
                'Content-Length'=>96,
            ],
            'form_params'=>[
                "username" => 'XXX',
                "password" => 'XXX.',
                "formhash" => 'XXX',
                "action" => 'login',
                "task" => 'login',
                "verycode" => $code,
            ],

        ]);

三 接着 再获得一个通行证cookie ,带着这个COOKIE 想去哪就去哪

<?php
    $header = $res->getHeaders();
        $a = $header['Set-Cookie'][0];
        //file_put_contents('b.txt', $a);
        $client1 = new \GuzzleHttp\Client();
        $res1 = $client1->request('GET',
            'http://www.ccchoo.com/mydisk.php', [
                'headers' => [
                    'Cookie' => $a,
            ],
                'allow_redirects' => true,
        ]);
        
       echo $res1->getBody();

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值