В локальном html файле отобразить страницу Яндекса с заменой
Добрый день!
Вопрос следующий. Необходимо создать html страницу, которая будет находиться у пользователей на рабочих столах (локально). В данном файле требуется взять исходный код страницы Яндекса (некого корпоративного ресурса), заменить в коде вхождение слова Погода (ссылки на некий ip адрес на другой адрес) на какое то свое слово, и отрисовать отредактированный код (например с помощью document.write(edited-html-code) на Js). Страница должна работать в ie8/9, Firefox. Какие варианты могут быть? Могу сделать экзешник на vb, который скачает нужную страницу на локал, сделает нужные замены, и вызовет объект интернет эксплорера, отобразив страницу, но хочется всё же без экзешника а с помощью скрипта... У меня Все попытки создать что то скриптовое заканчиваются проблемой cross domain protection (xmlhttprequest, Iframe, ...) |
Цитата:
|
Может всё же есть какие нибудь примеры подобного "обмана"?
В статьях мелькали слова jsonp, postMessage.. Но честно говоря эти технологии вообще не знакомы мне. |
jsonp - есть такое, но и сервер должен отдавать соответствующий заголовок.
|
Аякс тоже не спасет?..
|
Нет, пока серер не будет передавать заголовок Access-Control-Allow-Origin для конкретного домена или для всех разрешающий такой доступ, ничего не получится.
|
Цитата:
get-yandex.php: header('Content-Type: text/javascript'); $content = file_get_contents('http://yandex.ru'); echo 'yandexCallback("' . addslashes($content) . '")'; А это в локальном файле: <!doctype> <html> <head> <meta charset="utf-8"> </head> <body> <script type="text/javascript"> function yandexCallback(content) { alert(content); } </script> <script src="http://mysite.ru/get-yandex.php" type="text/javascript"></script> </body> </html> |
Цитата:
|
Ruslan_xDD,
Спасибо! Появилась возможность на неком внутренеем сервачке с поднятым xampp создать свою страничку пхп, как вы написали выше get-yandex.php, которая на себе всегда будет показывать код яндекса, а затем в своем локальном файле штмл содрать его. Вопрос в том, нужно ли давать какие то привилегии файлу get-yandex.php, чтобы мой локальный файл сумел выдрать с него этот код, а то изначальная проблема может зациклиться перенесясь со страницы Яндекса на мою фейковую страницу (что то типа заголовка access control allow origin о котором писали выше или что то еще) ? А также останется найти пхп код функции file_get_contents, так? |
laimas,
Поясните пожалуйста, что значит свой/не свой сервер? Изначальная задача состоит в том чтобы выдрать код некой страницы с внутреннего корпоративного интранетовского сервера, но расположенного в другой сети, нежели наши рабочие компы. Тот 'наш' сервер с поднятым xampp о котором я написал выше, также находится в другой сети, получается что он не поможет мне и будет 'не своим'? Картина следующая: Рабочие станции на которых будет работать создаваемый штмл - в сети 10.95.128.ххх Сервер с нужной штмл страницей, которую хотим украсть - в сети 10.85.151.65 (к примеру) 'Наш' сервачок с xampp на котором я могу создать свои пхп страницы - в сети 10.95.129.11(к примеру) |
optik77, никакие привилегии не нужны.
По сути получается следующая картина: мы с помощью file_get_contents получаем страницу яндекса и записывает это всё в переменную. Далее, в заголовке указываем, что на выходе у нас должен получиться JS-файл (text/javascript), хотя это не обязательно. Потом мы генерируем название ф-ции, которая будет вызвана (в нашем случае - yandexCallback), и в качестве параметра передаём в неё то, что получили от яндекса. В итоге у нас получается JS файл примерно такого вида: yandexCallback("<html><head>....</head><body>....</body></html>"); И мы подключаем этот файл предварительно объявив нашу ф-цию yandexCallback, и она будет вызвана из того самого файла. Как-то так. P.S.: ещё нужно экранировать или удалить переносы строк, иначе будет ошибка: yandexCallback("<html><head>... </head><body>....</body></html>"); //Syntax error Можно сделать вот так: echo 'yandexCallback("' . addslashes(preg_replace(/[\n\r\f]+/, '', $content)) . '")'; |
Цитата:
Чужой, это не ваш, сервером Яшки вы управлять не можете, и распоряжаться его контентом не получится. |
Ruslan_xDD,
Прикол в том, что сделал я все как велели. Создал файл get_content.php Сперва указал в качестве урла некий другой адрес, проверил работу, вызвал пхп, получил html код запрашиваемого ресурса. Указал свой нужный адрес сайта и получил в качестве кода некий штмл код из трех строк с тайтлом этого сайта и в боди указано 'невозможно выполнить запрошенную операцию'. Т.е видимо их сайт был готов что я функцией file_get_contents полезу к ним за кодом и аккуратно послали меня. Help! Как еще можно их обмануть и выцепить злосчастный исходник? |
Цитата:
|
laimas,
Подскажите пожалуйста, как понять какой контекст составить? |
$stream = curl_init(); curl_setopt($stream, CURLOPT_HEADER, 0); curl_setopt($stream, CURLOPT_USERAGENT, 'Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.9.168 Version/11.51'); curl_setopt($stream, CURLOPT_URL, 'http://yandex.ru/'); curl_setopt($stream, CURLOPT_TIMEOUT, 10); curl_setopt($stream, CURLOPT_RETURNTRANSFER, 1); curl_setopt($stream, CURLOPT_FOLLOWLOCATION, 1); $content = curl_exec($stream); curl_close($stream); |
Контекст собственно опции запроса, а вот что проверяет ресурс запрашиваемый, это нужно определять, это могут быть и куки, и реферер... Для file_get_contents контекст задается так.
Но в с случае кук лучше использовать cURL, и почитать об этом: просто - http://www.odmin4eg.ru/2008/curl-cookie-cookies/ продвинуто - http://habrahabr.ru/post/133191/ Экспериментируйте пока не установите, что требует сервер. |
Уважаемые, получилось с помощью курла!
Но только в ie.....*плач* В файерфоксе пустой лист Причем если в файрфоксе открыть мой сайт с пхп скриптом то он на экране отображает весь код: GetHTMLcode("<html>...</html>") А при отработке моей штмл страницы с рабочего стола-пустота, хотя в интернет эксплорере все работает! ? |
Цитата:
Это как, страницу с РНР сценарием? Ну а с чего бы оно выполнялось, для этого нужно локальный сервер иметь. |
Разобрался, в файрфоксе не работало из за кодировки самого файла. Спасибо
|
Часовой пояс GMT +3, время: 21:12. |