2016-07-22 116 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

想通了自己:

我從GOUTTE客戶端的cookie和它們存儲在狂飲客戶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中提供文件名稱。 –

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

歡迎來到Stack Overflow!儘管這段代碼可以解決這個問題,但[包括一個解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要使用解釋性註釋來擠佔代碼,因爲這會降低代碼和解釋的可讀性! – FrankerZ

+0

即使您的代碼解決了OP問題,建議您將一些描述性文本添加到代碼段中。 –