Скачать файл после формы входа с Goutte / Guzzle

Я хочу войти на веб-страницу и скачать файл.

До сих пор я пробовал код ниже. Проблема в том, что похоже я больше не авторизован. Загруженный файл является страницей login.html.

Кто-нибудь знает, как это сделать? Заранее спасибо!

<?php

require 'vendor/autoload.php';

use Goutte\Client;

$client = new Client();

$crawler = $client->request('GET', 'https://website.com/login.php');

$form = $crawler->selectButton('Login')->form();
$crawler = $client->submit($form, array('username' => 'username', 'password' => 'password'));

...

$download_link = 'https://website.com/extracted_download_link_from_crawler.pdf';

$guzzleClient = $client->getClient();

$response = $guzzleClient->get($download_link, ['save_to' => '/local_path/file.pdf']);

person Ramon Hollands    schedule 22.07.2016    source источник
comment
Вы пытались установить пользовательский агент?   -  person lauda    schedule 05.08.2016


Ответы (2)


Сам разобрался:

Я получаю файлы cookie от клиента Goutte и сохраняю их в файле cookie клиента Guzzle:

//get the PHPSESSION COOKIE
$cookieJar = $goutteClient->getCookieJar();
$all_cookies = $cookieJar->all();
$PHPSESSID_value = $all_cookies[7]->getValue();

//Update the cookie for different guzzleClient and download
$guzzleClient = $client->getClient();
$jar = new \GuzzleHttp\Cookie\CookieJar;
$response = $guzzleClient->get($download_link, ['cookies' => $jar, 'save_to' => '/local_path/file.pdf']);
person Ramon Hollands    schedule 07.08.2016
comment
Есть ли у вас какие-либо идеи о том, как прочитать имя в URL-адресе загрузки? В приведенном выше случае имя файла находится в URL-адресе. Но не всегда имя файла будет указано в URL-адресе. - person Harish Ninge Gowda; 11.01.2017

person    schedule
comment
Добро пожаловать в Stack Overflow! Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего поста. Помните, что вы отвечаете на вопрос для будущих читателей, и эти люди могут не знать причин вашего предложения кода. Также старайтесь не перегружать свой код пояснительными комментариями, так как это снижает читабельность как кода, так и пояснений! - person Goodbye StackExchange; 26.01.2018
comment
Даже если ваш код решает проблему OP, рекомендуется добавить описательный текст в ваш фрагмент кода. - person Ahmad F; 26.01.2018