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