Par*_*unt 6 php browser phpquery web-scraping
我正在尝试使用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
}
Run Code Online (Sandbox Code Playgroud)
如何使用会话/登录cookie发出其他请求?
我查看了源代码来帮助您解决这个问题。我的第一印象是代码写得非常糟糕。调试代码被注释掉,到处都是拼写错误,一英里长的函数等等。从长远来看,您确实可能需要考虑切换到不同的解决方案,因为如果作者更改了此代码中的某些内容,您最终可能会拥有自己的解决方案升级后代码被破坏。
也就是说,WebBrowser 插件使您可以访问浏览器对象本身,其中包含一个名为 getLastResponse() 的函数。这会返回一个Zend_Http_Response对象,理论上您可以使用该对象来获取 cookie。
问题是您没有任何方法来设置这些 cookie。您必须在第 102 行附近修补 Web 浏览器插件,以包含您自己的 HTTP 请求对象(参数 2 phpQuery::ajax())以及您的 cookie 设置,如下所示:
$xhr = phpQuery::ajax(array(
'type' => 'GET',
'url' => $url,
'dataType' => 'html',
));
Run Code Online (Sandbox Code Playgroud)
或者,您也可以修补phpQuery.php第 691 行以包含一个全局 cookie jar,您可以将其定义为单例等。(就在它说的地方$client->setCookieJar();)。
同样,这段代码写得非常糟糕,即使它缺少一些功能,使用原始的curl调用可能会更好。
| 归档时间: |
|
| 查看次数: |
1034 次 |
| 最近记录: |