1.登录:

本篇文章依赖第三方包:Guzzle

composer require guzzlehttp/guzzle

模拟登录代码:获取session。

use GuzzleHttp\Client;
use GuzzleHttp\Cookie\CookieJar;
public function post(){
$client = new \GuzzleHttp\Client();
$res = $client->request("POST", "https://www.demo.com/user.php?act=logincheck", [
'headers' => [
'Content-Type'=>'application/x-www-form-urlencoded',
'Content-Length'=>96,
],
'form_params'=>[
"username" => 'demo',
"password" => 'demo',
],
]);
$header = $res->getHeaders();
$a = $header['Set-Cookie'][0];
dump($a);exit;
}

在上端代码中,获取了session值,$a 可以保存在缓存中,获取数据库中。

如何使用session去请求其他地址:

public function get(){
$url = 'https://www.demo.com/view/0073289a6cd4.html';
$cookieJar = CookieJar::fromArray([
'PHPSESSID' => 'lp4gc523pdromhlhqq3fokou62'//这边的session值,是上面获取的$a 的值,可能需要切割整理数据,你把上面的打印即可查看到值。
], 'www.demo.com'); // 此处记得请求域名需要保持跟请求的url host一致,否则不会携带此cookie。

$client = new Client([
'cookies' => $cookieJar,
]);
$result = $client->get($url);

$data =$result->getBody()->getContents();
dump($data);
}

即可爬取需要登录的内容了

如何模拟登录有验证码的系统?

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