2016-07-22 3 views
1

Я хочу войти на веб-страницу и загрузить файл.Загрузить файл после формы входа в систему с 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']); 
+0

Пытались установить агент пользователя? – lauda

ответ

0

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

Я получаю печенье от Клиента Гут и хранить их в Client cookiejar жрать:

//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']); 
+0

Есть ли у вас какие-либо идеи о том, как читать имя на URL-адресе загрузки? В приведенном выше случае имя файла находится в URL-адресе. Но не всегда имя файла будет указано в URL-адресе. –

1
$cookieJar = $client->getCookieJar(); 
$guzzleClient = $client->getClient(); 
$jar = GuzzleHttp\Cookie\CookieJar::fromArray($cookieJar->all(), 'website.com'); 
$response = $guzzleClient->get('URL TO FILE', ['cookies' => $jar, 'sink' => 'my.pdf']); 
+0

Добро пожаловать в переполнение стека! Хотя этот фрагмент кода может решить вопрос, [включая объяснение] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, так как это уменьшает читаемость кода и объяснений! – FrankerZ

+0

Даже если ваш код решает проблему OP, рекомендуется добавить часть описательного текста в фрагмент кода. –