Отправка исходного кода на внешний сервер - PullRequest
2 голосов
/ 18 декабря 2010

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

Однако я не видел ничего подобного и не уверен, как решить эту задачу.Я полагаю, что какой-то HTTP-пост будет лучшим подходом, но я совершенно новичок в этих идеях, и я даже не знаю, куда отправлять данные для их анализа (не имеет смысла отправлять целыеHTML-документ в базу данных, например).

Таким образом, в целом моя общая цель состоит в том, чтобы это работало примерно так (обратите внимание, что мне нужна только помощь с шагами 1 и 2. Я знаком с методами анализа данных,просто никогда не применял их в Интернете):

  1. Пользователь просматривает определенную страницу
  2. Исходный код отправляется через greasemonkey или каким-либо другим инструментом на сервер
  3. Код разбирается на значимые данные, которые хранятся в базе данных MySQL.

Любые советы или помощь приветствуются, спасибо!

Редактировать: Код

ihtml = document.body.innerHTML;
GM_xmlhttpRequest({
method:'POST',
url:'http://www.myURL.com/getData.php',
data:"SomeData=" + escape(ihtml)
});

Редактировать: Текущий журнал JS:

Namespace/GMScriptName: Server Response: 200
OK
4
Date: Sun, 19 Dec 2010 02:41:55 GMT
Server: Apache/1.3.42 (Unix) mod_gzip/1.3.26.1a mod_auth_passthrough/1.8 mod_log_bytes/1.2 mod_bwlimited/1.4 FrontPage/5.0.2.2635 mod_ssl/2.8.31 OpenSSL/0.9.8e-fips-rhel5 PHP-CGI/0.9
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

Array
(
)

http://www.url.com/getData.php

1 Ответ

3 голосов
/ 18 декабря 2010

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

Вы можете использоватьсвойство innerHTML доступно во всех html-элементах для получения HTML-кода внутри этого узла - например, элемента body.Затем вы можете использовать HTTP-запрос AJAX (S!) Для публикации данных.

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

NB: innerHTML получает представление исходного кода, который будет отображать страницу в ее текущем состоянии, а НЕ фактический источник, который был отправлен с веб-сервера - например, если вы использовали JS для добавления элементаисточник для этого элемента будет включен в innerHTML, даже если он никогда не отправлялся через Интернет.

Альтернативой может быть использование запроса AJAX для получения текущего URL-адреса и отправки себе ответа.Это было бы именно то, что было отправлено клиенту, но рассматриваемый сервер будет знать, что страница обслуживалась дважды (и в некоторых веб-приложениях, которые могут вызвать проблемы - например, при «нажатии» кнопки удаления дважды)

Одно из последних предложений - просто отправить текущий URL-адрес себе и выполнить загрузку на своих собственных серверах. Это также уменьшит некоторые рисков безопасности, поскольку вы не сможете получить контент для страниц.которые не являются общедоступнымиесли вы хотите получить полную информацию

PHP код:

<?php
    $PageContents = $_POST['PageContents']
?>

скрипт GreaseMonkey:

 var ihtml = document.body.innerHTML;
 GM_xmlhttpRequest({
  method:'POST',
  url:'http://example.com/getData.php',
  data:"PageContents=" + escape(ihtml),
  headers: {'Content-type': 'application/x-www-form-urlencoded'}
 });
...