6

我正在尝试使用 PHPQuery 的 WebBrowser 插件登录网站。我能够成功登录,但我不确定如何重用上一次调用中的 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 发出其他请求?

4

1 回答 1

3

我查看了源代码来帮助您解决这个问题。我的第一印象是代码写得很糟糕。调试代码被注释掉,错别字到处都是,一英里长的函数等等。从长远来看,你真的可能想考虑切换到不同的解决方案,因为如果作者在这段代码中更改了一些东西,你最终可能会拥有自己的代码因升级而损坏。

话虽如此,WebBrowser 插件让您可以访问浏览器对象本身,其中包含一个名为 getLastResponse() 的函数。这将返回一个Zend_Http_Response对象,理论上您可以使用它来获取 cookie。

问题是您无法设置这些 cookie。您必须在第 102 行附近的某处修补 Web 浏览器插件,以将您自己的 HTTP 请求对象(用于 的参数 2 phpQuery::ajax())与您的 cookie 集一起包含在此处:

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

或者,您也可以修补phpQuery.php第 691 行以包含一个全局 cookie jar,您可以将其定义为单例左右。(就在它说的地方$client->setCookieJar();)。

同样,这段代码写得非常糟糕,即使它缺少一些功能,使用raw curl calls可能会更好。

于 2013-05-28T08:03:00.397 回答