这个适用于已经有账号和密码,需要拿到指定的数据。
整体过程是这样的
一.https://www.sojson.com/httpRequest/ 使用这个网站模拟了一下整体的操作。发现了几个问题如要拿到的参数有
- 隐藏域的input 内容
- cookie
- 验证码
隐藏的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();