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

は自分自身を考え出し:

私はグットクライアントからクッキーを取得し、がつがつ食うクライアントを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の問題を解決したとしても、コードスニペットに説明的なテキストを追加することをお勧めします。 –

関連する問題