client = new Client([ 'base_uri' => config('symfonycast.base_url'), 'cookies' => true ]); $response = $this->client->get('login'); $token = $htmlParser->getCsrfToken($response); $response = $this->client->post('login', [ 'form_params' => [ 'email' => config('symfonycast.login'), 'password' => config('symfonycast.password'), '_csrf_token' => $token ], 'on_stats' => function (TransferStats $stats) use (&$currentUrl) { $currentUrl = $stats->getEffectiveUri(); } ]); } public function getInfo() { $coursePage = $this->client->get('courses/filtering'); $courses = $this->htmlParser->getCourses($coursePage); $courses->each(fn($course) => $course->save()); $singleCoursePage = $this->client->get($courses[3]->link); /** @var Course $course */ foreach ($courses as $course) { $singleCoursePage = $this->client->get($course->link); $chapters = $this->htmlParser->getCourseDetails($singleCoursePage, $course->id); $chapters->each(fn($chapter) => $this->videoSize($chapter)->save()); } } public function videoSize(Chapter $chapter): Chapter { try { $response = $this->client->head($chapter->video_link); if ($response->hasHeader('Content-Length')) { $chapter->video_size = $response->getHeader('Content-Length')[0]; } } catch (\GuzzleHttp\Exception\ClientException $exception) { } return $chapter; } }