【问题标题】:PHPQuery WebBrowser plugin - using cookiesPHPQuery WebBrowser 插件 - 使用 cookie
【发布时间】:2013-01-07 01:09:21
【问题描述】:

我正在尝试使用 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 发出其他请求?

【问题讨论】:

  • 不幸的是,我认为这个插件不可能,但如果你能解释你的目标,我们可能会向你发送另一个对你有用的方向。例如,您还可以使用CURL 登录到外部站点并保持登录状态。像simple HTML DOM 这样的东西可以用来解析结果并做后续请求

标签: php browser web-scraping phpquery


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2011-09-09
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2010-11-20
    相关资源
    最近更新 更多