Goutte Scrape Войти на безопасный сайт https

Итак, я пытаюсь использовать Goutte для входа на веб-сайт https, но получаю следующую ошибку:

cURL error 60: SSL certificate problem: unable to get local issuer certificate 500 Internal Server Error - RequestException 1 linked Exception: RingException

И это код, который создатель Goutte говорит использовать:

use Goutte\Client;

$client = new Client();

$crawler = $client->request('GET', 'http://github.com/');
$crawler = $client->click($crawler->selectLink('Sign in')->link());
$form = $crawler->selectButton('Sign in')->form();
$crawler = $client->submit($form, array('login' => 'fabpot', 'password' =>     'xxxxxx'));
$crawler->filter('.flash-error')->each(function ($node) {
    print $node->text()."\n";
});

ИЛИ вот код, который рекомендует Symfony:

use Goutte\Client;

// make a real request to an external site
$client = new Client();
$crawler = $client->request('GET', 'https://github.com/login');

// select the form and fill in some values
$form = $crawler->selectButton('Log in')->form();
$form['login'] = 'symfonyfan';
$form['password'] = 'anypass';

// submit that form
$crawler = $client->submit($form);

Дело в том, что ни один из них не работает, я получаю ошибку, которую я написал выше. Я МОГУ, однако войти в систему, используя код, написанный в этом предыдущем вопросе, который я задал: Очистить cURL, затем разобрать/найти определенный контент

Я просто хочу использовать Symfony/Goutte для входа в систему, чтобы было проще собирать нужные мне данные. Любая помощь или предложения, пожалуйста? Спасибо!


person Kenny    schedule 17.03.2015    source источник
comment
Прочитайте о проблеме с сертификатом SSL здесь   -  person Peter Popelyshko    schedule 17.03.2015


Ответы (1)


Добавление в код следующего кода устраняет ошибку (конфигурация curl):

    // make a real request to an external site
    $client = new Client();
    $client->getClient()->setDefaultOption('config/curl/'.CURLOPT_SSL_VERIFYHOST, FALSE);
    $client->getClient()->setDefaultOption('config/curl/'.CURLOPT_SSL_VERIFYPEER, FALSE);
    $crawler = $client->request('GET', 'https://github.com/login'); 

Но затем возникает другая ошибка:

The current node list is empty.
500 Internal Server Error - InvalidArgumentException 

Еще раз, я использую Goutte с Symfony и код по умолчанию для выполнения тестовой задачи, такой как вход в https github.

Исправление предыдущей ошибки, связанной с node list empty, заключается в том, что на кнопке страницы входа в Github на самом деле написано «Войти», а не Отправить или Войти на кнопке. К сожалению, API Goutte не ясно, относится ли $form = $crawler->selectButton('Sign in')->form(); к атрибуту html name или к фактическому простому тексту кнопки. Очевидно, это обычный текст; немного сбивает с толку. Итак, после дополнительных исследований плохо документированного API, я закончил со следующим кодом, который работает:

// make a real request to an external site
$client = new Client();
$client->getClient()->setDefaultOption('config/curl/'.CURLOPT_SSL_VERIFYHOST, FALSE);
$client->getClient()->setDefaultOption('config/curl/'.CURLOPT_SSL_VERIFYPEER, FALSE);
$crawler = $client->request('GET', 'https://github.com/login');

// select the form and fill in some values
$form = $crawler->selectButton('Sign in')->form();
$form['login'] = 'symfonyfan';
$form['password'] = 'anypass';

// submit that form
$crawler = $client->submit($form);
echo $crawler->html();
person Kenny    schedule 17.03.2015