cURL和抓取寻求检测帧支持的网站

时间:2011-03-27 03:10:33

标签: php security curl screen-scraping frames

我正在尝试使用PHP / cURL从Natwest的网上银行服务中获取信息 - 这个想法是,如果它实际上可以做到,那么我可能会建立一个更适合移动设备的网站来访问该服务,或者可能是Android应用。

页面显然采用了一些涉及Javascript,框架集的安全功能,谁知道还有什么。从我可以看出,Javascript中没有cookie操作(我可以看到),但是页面源中生成的URL正在发生...并且每当我尝试查看将成为其中一部分的页面时对于框架集,cURL只显示框架集页面。如果我在请求登录页面时选择不遵循重定向,我只会收到一条消息“对象已移动” - 以及指向框架集页面的链接。我出错的任何想法?

<? 

$ckfile = tempnam ("/tmp", "COOKIE");

// INITIAL REQUEST TO SITE TO GET COOKIE

$ch = curl_init();

$userAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)"
   . "AppleWebKit/534.16 (KHTML, like Gecko) "
   . "Chrome/10.0.648.151 Safari/534.16";

curl_setopt($ch,CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL, 'http://www.nwolb.com');
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$data = curl_exec($ch);


// EXTRACTING OTHER POSS REDIRECTS / FRAMESET URLs FROM RESULTING PAGE...

// A Javascript function on the default.aspx page specifies a 
// top.window.document redirect, I store this in $newurl in case it's needed
preg_match('/top\.window\.document\.location\.href = \'(?P<url>.*)\';/', $data, $newurl);

// It's the login page I want, the Frameset page does specify a link, 
// but (what I assume is) the frame-breaking protection sends me back to
// the frameset page every time...
preg_match('/login.aspx\?(?P<referer>.*)"><\/frame>/', $data, $loginurl);

//Subsequent request, attempting to bring up the login page
curl_setopt($ch, CURLOPT_URL, 'https://www.nwolb.com/login.aspx?' . $loginurl['referer']);
$data = curl_exec($ch);

curl_close($ch);

?>

这是一个值得放弃的实验,还是可以实现? PHP是适合这项工作的合适工具吗?或者尝试像Ruby上的Watir一样更好吗?

3 个答案:

答案 0 :(得分:1)

仅仅因为你并不意味着你应该这样做。银行业受到严格监管,通过提供一个破坏银行网站的应用程序,您实际上提供的是银行服务,可能会发现自己受到与银行相同的监管 - 更不用说对通过您的应用程序发生的任何违规行为承担责任。

你也会违反Natwest的服务条款,任何破坏他们(或任何其他银行)网站的应用程序很可能会发现自己很快就会被起诉。

那就是说,如果你真的想要抓住网站,你应该看看底部的“辅助功能”链接。屏幕阅读器和屏幕抓取器之间差别不大。

答案 1 :(得分:0)

是的,这当然可以实现自动化。但是,当银行决定将来更新其网站时,您的服务可能会被破坏。

要查找所需数据,请尝试使用TamperDataHttpFox等Firefox扩展程序监控您的登录信息。 然后在脚本中复制所有必需的数据和标头。确保设置user-agent和referrer标头,因为它们通常是必需的。

答案 2 :(得分:0)

get_browser - 告诉用户浏览器的功能

<?php
$browser = get_browser(null, true);
print_r($browser);
?>

以上示例将输出类似于:

的内容
Array
(
    [browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*)
    [browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) 
    [parent] => Firefox 0.9
    [platform] => WinXP
    [browser] => Firefox
    [version] => 0.9
    [majorver] => 0
    [minorver] => 9
    [cssversion] => 2
    [frames] => 1
    [iframes] => 1
    [tables] => 1
    [cookies] => 1
    [backgroundsounds] =>
    [vbscript] =>
    [javascript] => 1
    [javaapplets] => 1
    [activexcontrols] =>
    [cdf] =>
    [aol] =>
    [beta] => 1
    [win16] =>
    [crawler] =>
    [stripper] =>
    [wap] =>
    [netclr] =>
)

参考:php手册