PHPQuery плагин веб - браузера- использование cookies

Я пытаюсь войти на веб-сайт с помощью плагина веб-браузера PHPQuery. Я могу успешно войти в систему, но я не уверен, как повторно использовать куки от предыдущего вызова к следующему.

$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 сеанса/входа?

1 ответов


Я посмотрел на исходный код, чтобы помочь вам с этой проблемой. Мое первое впечатление было, что код написан очень плохо. Отладка кода комментируется, опечатки повсюду,функции длиной в милю и т. д. Вы действительно можете захотеть переключиться на другое решение в долгосрочной перспективе, потому что если автор что-то изменит в этом коде, вы можете получить свой собственный код, нарушенный обновлением.

это, как говорится, плагин WebBrowser дает вам доступ к сам объект браузера, который содержит функцию getLastResponse (). Это возвращает Zend_Http_Response "объект", который вы можете теоретически используйте, чтобы получить куки.

проблема в том, что у вас нет никакого способа установить эти куки. Вам нужно будет исправить плагин веб-браузера где-то вокруг строки 102, чтобы включить свой собственный объект HTTP-запроса (параметр 2 для phpQuery::ajax()) С вашим набором печенья, вокруг здесь:

$xhr = phpQuery::ajax(array(
    'type' => 'GET',
    'url' => $url,
    'dataType' => 'html',
));

в качестве альтернативы вы также можете патч phpQuery.php строка 691 такие куков можно определить как синглтон или так. (Прямо там, где написано $client->setCookieJar();).

опять же, этот код очень плохо написан, вам, вероятно, намного лучше использовать raw curl calls, даже если ему не хватает немного функциональности.