cURL и чистящие сайты, которые ищут поддержку Frames - PullRequest
1 голос
/ 27 марта 2011

Я пытаюсь получить информацию из службы онлайн-банкинга Natwest с помощью PHP / cURL - идея заключается в том, что, если это действительно возможно, то я мог бы сделать сайт, более удобный для мобильных устройств, для доступа к службе, или, может быть, 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 подходящим инструментом для работы? Или может быть лучше попробовать что-то вроде Watir на Ruby?

Ответы [ 3 ]

1 голос
/ 27 марта 2011

То, что вы можете, не означает, что вы должны. Банковское дело строго регулируется, и, предлагая приложение, которое очищает банковский сайт, вы, по сути, предлагаете банковские услуги и можете регулировать себя так же, как и банк, не говоря уже об ответственности за любое нарушение, которое происходит через ваше приложение.

Вы также нарушили бы Условия использования Natwest, и любое приложение, которое счищает их (или любой другой банк) сайт, скорее всего, очень быстро подало бы в суд.

Тем не менее, если вы действительно хотите очистить сайт, вы должны посмотреть ссылку "Доступность" внизу. Не большая разница между программой чтения с экрана и скребком.

0 голосов
/ 02 января 2013

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] =>
)

refrence: php manual

0 голосов
/ 12 апреля 2011

Да, конечно, это можно автоматизировать.Однако ваша служба может быть повреждена, когда банк решит обновить свой сайт в будущем.

Чтобы узнать, какие данные требуются, попробуйте отслеживать ваш логин с расширением firefox, например TamperData или HttpFox .Затем скопируйте все необходимые данные и заголовки в вашем скрипте.Обязательно установите заголовки user-agent и referrer, поскольку они часто требуются.

...