Я пытаюсь войти на сайт с помощью плагина WebBrowser PHPQuery. Я могу успешно войти в систему, но я не уверен, как повторно использовать файлы cookie с предыдущего вызова на следующий.
$client = phpQuery::browserGet('https://website.com/login', 'success1'); function success1($browser) { $handle = $browser ->WebBrowser('success2'); $handle ->find('input[name=name]') ->val('username'); $handle ->find('input[name=pass]') ->val('password') ->parents('form') ->submit(); } function success2($browser) { print $browser; // prints page showing I'm logged in // make authenticated requests here }
Как делать другие запросы с помощью файлов cookie сеанса / входа?
Я ознакомился с исходным кодом, чтобы помочь вам в решении этой проблемы. Мое первое впечатление заключалось в том, что код был очень плохо написан. Отладочный код закомментирован, опечатки повсюду, функции длиной в милю и т. Д. Возможно, вам стоит подумать о переходе на другое решение в конечном счете, потому что, если автор что-то изменит в этом коде, вы можете оказаться в своем собственном код с обновлением.
При этом плагин WebBrowser предоставляет вам доступ к самому объекту браузера, который содержит функцию getLastResponse (). Это возвращает объект Zend_Http_Response
, который теоретически можно использовать для получения файлов cookie.
Проблема в том, что у вас нет способа установить эти файлы cookie. Вам нужно будет исправить плагин веб-браузера где-то вокруг строки 102, чтобы включить свой собственный объект HTTP-запроса (параметр 2 для phpQuery::ajax()
) с вашим набором cookie, здесь:
$xhr = phpQuery::ajax(array( 'type' => 'GET', 'url' => $url, 'dataType' => 'html', ));
В качестве альтернативы вы также можете исправить строку 691 phpQuery.php
чтобы включить глобальную банку cookie, которую вы могли бы определить как синглтон или около того. (Вправо, где указано $client->setCookieJar();
).
Опять же, этот код очень плохо написан, вам, вероятно, намного лучше использовать raw curl calls , даже если ему не хватает функциональности.