我正在尝试使用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发出其他请求?
答案 0 :(得分:3)
我已经看了一下源代码来帮助解决这个问题。我的第一印象是代码编写得非常糟糕。调试代码被注释掉,遍布整个地方的拼写错误,里程长的函数等等。从长远来看,你真的可能要考虑切换到不同的解决方案,因为如果作者在这段代码中改变某些东西,你可能最终会拥有自己的代码因升级而中断。
话虽这么说,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可能会更好,即使它缺少一些功能。