PHPQuery WebBrowser 插件 - 使用 cookie

标签 php browser web-scraping phpquery

我正在尝试使用 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
}

如何使用 session /登录 cookie 发出其他请求?

最佳答案

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

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

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

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

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

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

关于PHPQuery WebBrowser 插件 - 使用 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14481677/

相关文章:

php - MySQL/Html 编码

php - 通过 PHP 需要 for 循环和动态 css

php - 我可以在子文件夹中组织 Doctrine YAML 映射吗?

php - 更改浏览器选项卡状态

JavaScript "window": What is its purpose? 它有什么作用?

c - 如何从头开始使用 C 编写 Web 浏览器

ruby - 如果它们在不同的页面上,如何抓取所有评论?

php - 如何在 php while 循环中显示几列,然后显示其余的其他列?

python - 无法使用 scrapy 访问 xpath 属性

javascript - 这是防止网络抓取工具在我的网站上找到我的电子邮件的有效方法吗?