2010-12-17 10 views
2

Ich bin daran interessiert, ein Skript zu schreiben, vorzugsweise eines, das einfach mit Browsern wie Greasemonkey hinzugefügt werden kann, das HTML-Quellcode einer Seite an einen externen Server sendet, wo es später sein wird geparste und nützliche Daten würden an eine Datenbank gesendet werden.Senden von Quellcode an einen externen Server

Allerdings habe ich nichts dergleichen gesehen und bin mir nicht sicher, wie ich diese Aufgabe angehen soll. Ich würde mir vorstellen, dass eine Art von HTTP-Post der beste Ansatz wäre, aber ich bin völlig neu bei diesen Ideen, und ich bin nicht einmal genau wo ich die Daten zum Parsen senden soll (es macht keinen Sinn, einen ganzen zu senden) HTML-Dokument zum Beispiel zu einer Datenbank).

Also im Grunde ist mein Gesamtziel etwas, das so funktioniert (beachten Sie, dass ich nur Hilfe in den Schritten 1 und 2 benötige. Ich bin vertraut mit Datenanalysetechniken, ich habe sie nie im Internet angewendet):

  1. User eine bestimmte Seite
  2. Quellcode wird über Grease oder einem anderen Werkzeug zu einem Server
  3. Der Code wird analysiert, in aussagekräftige Daten gesendet, die in einer MySQL-Datenbank gespeichert ist.

Alle Tipps oder Hilfe wird sehr geschätzt, danke!

bearbeiten: Code

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

Edit: Aktuelle JS Log:

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 
+0

Das klingt wie etwas, das für Behavioral Targeting von Werbung oder ähnliches verwendet werden würde - darüber im Klaren sein, dass die Seite Quelle in Frage vertrauliche Informationen enthalten (E-Mails, Bankunterlagen usw.) Persönlich würde ich das vollständig vermeiden, aber wenn Sie darauf bestehen, stellen Sie sicher, dass Ihr Code SEHR sicher ist. – Basic

Antwort

3

Wie im Kommentar zu Ihrem Q erwähnt, ich bin nicht davon überzeugt, das ist eine gute Idee, und ich persönlich Vermeiden Sie Erweiterungen wie Pest, aber ...

Sie können die innerHTML Eigenschaft verwenden, die für alle HTML-Elemente verfügbar ist, um den HTML-Code innerhalb dieses Knotens zu erhalten - z ement. Sie können dann eine AJAX HTTP (S!) - Anfrage verwenden, um die Daten zu veröffentlichen.

Sie sollten auch eine Form der Komprimierung in Betracht ziehen, da einige Seiten sehr groß sein können und die meisten Benutzer eine höhere Download- als Uploadgeschwindigkeit haben.

NB: innerHTML erhält eine Darstellung des Quellcodes, der die Seite in ihrem aktuellen Zustand anzeigen würde, NICHT die tatsächliche Quelle, die vom Webserver gesendet wurde - zB wenn Sie JS zum Hinzufügen eines Elements, der Quelle dafür, verwendet haben Element würde in innerHTML enthalten sein, obwohl es nie über das Web gesendet wurde.

Eine Alternative wäre, eine AJAX-Anfrage zu verwenden, um die aktuelle URL abzurufen und sich die Antwort zu senden. Dies wäre genau das, was an den Client gesendet wurde, aber der betreffende Server wird wissen, dass die Seite zweimal bedient wurde (und in einigen Web-Anwendungen, die Probleme verursachen könnten - z.durch „Drücken“ eine Löschtaste zweimal)

würde man endgültig Vorschlag einfach sein, um die aktuelle URL an sich selbst zu senden und den Download auf Ihren eigenen Servern zu tun - Dies würde auch mildern einige der Sicherheitsrisiken, wie Sie wouldn‘ t in der Lage sein, den Inhalt für Seiten abrufen, die

nicht öffentlich sind

EDIT:

NB:ich viele falschen Informationen gelöscht habe, die bei der Verfolgung des Problems verwendet wurden, überprüfen Sie die Bearbeitungsprotokolle, wenn Sie wollen alle Details

PHP-Code:

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

Greasemonkey-Skript:

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'} 
}); 
+0

Ich hätte erwähnen sollen, dass ich dieses Skript nur auf einer bestimmten Website verwenden werde, die keine sensiblen Informationen enthält, nur Daten, die ich einfach analysieren möchte. Können einige die Möglichkeit erklären, HTTP über Ajax oder andere Tools zu nutzen? Ich habe mich nach Beispielen umgeschaut, und das Beste, was ich gefunden habe, sind Skripte, die Formulare über URL-Informationen ausfüllen sollen, was meiner Meinung nach nicht für den Quellcode einer ganzen Seite gelten würde. – Chris

+0

Ich habe meine Antwort mit mehr Details bearbeitet – Basic

+0

Danke dafür! Etwas in Greasemonkey ist perfekt für meine Bedürfnisse. Ich verstehe die Felder im GM_xmlhttpRequest-Objekt, aber könnten Sie mir eine Vorstellung davon geben, wie die MyScript.php die Informationen erhält? – Chris

Verwandte Themen