我正在尝试使用 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 发出其他请求?
我查看了源代码来帮助您解决这个问题。我的第一印象是代码写得非常糟糕。调试代码被注释掉,到处都是拼写错误,一英里长的函数等等。从长远来看,您确实可能需要考虑切换到不同的解决方案,因为如果作者更改了此代码中的某些内容,您最终可能会拥有自己的解决方案升级后代码被破坏。
也就是说,WebBrowser 插件使您可以访问浏览器对象本身,其中包含一个名为 getLastResponse() 的函数。这会返回一个Zend_Http_Response
对象,您可以理论上用于获取cookie。
问题是您没有任何方法来设置这些 cookie。您必须在第 102 行附近的某个位置修补 Web 浏览器插件,以包含您自己的 HTTP 请求对象(参数 2phpQuery::ajax()
)与您的cookies设置,在这里:
$xhr = phpQuery::ajax(array(
'type' => 'GET',
'url' => $url,
'dataType' => 'html',
));
或者你也可以修补phpQuery.php
第 691 行包含一个全局 cookie jar,您可以将其定义为单例等。 (就在它说的地方$client->setCookieJar();
).
再说一次,这段代码写得非常糟糕,你最好使用原始卷曲调用 http://php.net/curl,即使它缺少一点功能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)