我正在尝试使用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发出其他请求?
发布于 2013-05-28 16:03:00
我已经查看了帮助您解决此问题的源代码。我的第一印象是代码写得很差。调试代码被注释掉了,到处都是打字错误,长达一英里的函数,等等。从长远来看,你可能真的想要考虑切换到不同的解决方案,因为如果作者在这段代码中更改了一些东西,你可能会因为升级而导致自己的代码崩溃。
也就是说,WebBrowser插件允许您访问浏览器对象本身,其中包含一个名为getLastResponse()的函数。这将返回一个Zend_Http_Response对象,理论上您可以使用它来获取cookies。
问题是您没有任何方法来设置这些cookie。您必须在第102行附近的某个位置修补web浏览器插件,以包含设置了cookies的您自己的HTTP request对象(phpQuery::ajax()的参数2),如下所示:
$xhr = phpQuery::ajax(array(
'type' => 'GET',
'url' => $url,
'dataType' => 'html',
));或者,您也可以对phpQuery.php 691行打补丁,使其包含一个全局cookie jar,您可以将其定义为单例或类似的东西。(就在上面写着$client->setCookieJar();的地方)。
再说一次,这段代码写得很差,你最好使用raw curl calls,即使它缺少一点功能。
https://stackoverflow.com/questions/14481677
复制相似问题