Gefälschte Online-Website, wenn sie offline ist

15

Ich entwickle eine Website mit einem lokalen Server, habe aber Remote-Abhängigkeiten. Ich möchte Anfragen nach Dateien von entfernten Servern fälschen. Zum Beispiel, wenn der Browser eine Anfrage für fooCDN.com/bloatedLib.jsden Inhalt von macht, /Users/name/Desktop/bloatedLib.jswird zurückgegeben.

Ich benutze einen Mac und eine Lösung, die auf System- oder Browserebene funktioniert, wäre in Ordnung. Wenn es auf Browserebene funktioniert, ist nur eine Firefox- oder Chrome-Lösung in Ordnung. Ich kann keinen Windows-Computer verwenden.

Daniel F
quelle
Können Sie einen Windows-Computer verwenden?
Geek1011
@ Geek1011 Nein, das wäre nicht möglich
Daniel F
5
Sie sind sich nicht sicher, ob ich Sie richtig verstehe, aber versuchen Sie, auf eine Website zuzugreifen, auch wenn Sie keine Internetverbindung haben? und wenn ja, auf eine lokale Kopie zugreifen? Wie ein Proxy-Server?
LPChip
@LPChip Ich benötige externe Abhängigkeiten wie jQuery, um geladen zu werden, auch wenn ich offline bin. Dies ist das Repository einer anderen Person, daher kann ich externe Abhängigkeiten nicht einfach lokal festlegen. Wenn es nur die Version in den Browser-Cache laden könnte, wenn es offline ist, wäre es perfekt. Der größte Teil der Website befindet sich auf einem lokalen Server.
Daniel F
Sie könnten HTML5 "Offline-Web-Apps" verwenden
Michael

Antworten:

11

Ich habe diesen kleinen Proxy-Server gehackt, um nur fehlende Dateien herunterzuladen. Richten Sie einfach Ihre Datei / etc / hosts so ein, dass sie auf Sites verweist, die Sie unter 127.0.0.1 zwischenspeichern möchten, und auf Sites, die Sie unter 0.0.0.0 blockieren möchten

#!/bin/sh 
nc -ll -p 80 -e sh -c ' 
while read A B DUMMY 
do 
   case "$A" in 
      [Gg][Ee][Tt]) 
         FULL=$B #full path of the file
         F=${FULL##*/}
         F=${F%%\?*} #file name only
         #if we have it cat it back to browser
         [ -f "$F" ] && cat "$F" && break 
      ;; 
      [Hh][Oo][Ss][Tt]*) 
         [ -f "$F" ] && break #file already exists
         HOST=${B:0:$((${#B}-1))} #the host name
         #resolve by DNS first so we can cache it
         sed -i "s/hosts:\t\tfiles /hosts:\t\t/g" /etc/nsswitch.conf 
         wget -t 0 -q --no-dns-cache $HOST$FULL
         #got it now revert to checking host file 1st
         sed -i "s/hosts:\t\t/hosts:\t\tfiles /g" /etc/nsswitch.conf
         #cat the file because I didn't think to wget through tee
         cat "$F" 
         break 
      ;; 
   esac 
done 
'

Beachten Sie, dass alle Dateien in einem Verzeichnis abgelegt werden, was zu Versionskonflikten führen kann. (Ich habe das absichtlich gemacht, damit ich nicht 500 Kopien von jquery habe.)

Technosaurus
quelle
Können Sie Ihren Code kommentieren, damit ich ihn besser verstehe? Ich mag diese Antwort sehr, weil ich nicht viel Software installieren muss
Daniel F
1
@DanielF Ich habe einige Inline-Kommentare hinzugefügt. Lassen Sie mich wissen, ob es Sinn macht, es ist wahrscheinlich einer der hackigsten Hacks, die ich geschrieben habe. Ich habe es nur notgedrungen geschrieben, weil ich immer wieder Browserstände hatte, die auf eine ausgelastete Ressource warteten. Ich sollte erwähnen, dass ich Puppy Linux verwendet habe, als ich es geschrieben habe, daher müssen einige Zeilen möglicherweise sudo ausgeführt werden.
Technosaurus
Hinweis: Einige Browser benötigen möglicherweise einen tatsächlichen http-Header, anstatt die Datei nur zu "catting" (obwohl keiner von mir dies getan hat). Wenn Sie einen Browser haben, der dieses schlechte Verhalten nicht akzeptiert / behebt, können Sie stat verwenden, um die Dateigröße abzurufen und einen richtigen Header zu drucken.
Technosaurus
@technosaurus: Ich versuche, etwas Ähnliches zu implementieren, aber es wird eine Fehlermeldung angezeigt: Können illegal option -- eSie uns dabei helfen?
Anurag Peshne
@AnuragPeshne Es gibt verschiedene Implementierungen von Netcat. Je nachdem, welche Implementierung Sie verwenden, können Sie möglicherweise den -cParameter zum Ausführen eines Skripts verwenden (genauso wie -eohne den sh -cTeil)
Technosaurus
24

Es hört sich so an, als würden Sie einen lokalen Webserver betreiben. Ausgezeichnet.

Im Dateisystem Ihres Mac befindet sich eine Datei namens /etc/hosts. Sie können alle Anforderungen fooCDN.coman Ihren lokalen Computer umleiten, indem Sie die folgende Zeile hinzufügen /etc/hosts:

127.0.0.1   foocdn.com www.foocdn.com

Zum Bearbeiten benötigen Sie Root-Berechtigungen (Superuser) /etc/hosts.

Die obige Zeile bedeutet, dass fooCDN.comvon Ihrem eigenen Computer geladen wird, auf dem ein Webserver empfangsbereit ist.

Sie haben jedoch nicht angegeben, welchen Webserver Sie lokal ausführen. Nach der Dokumentation des Web - Server, sollten Sie einen virtuellen Host erstellen, die das Dokument Fußpunkten fooCDN.comauf /Users/name/Desktop/.

Dies ist eine Beispielkonfiguration (ich habe sie nicht selbst getestet), die Sie mit Apache verwenden können :

<VirtualHost 127.0.0.1:80>
    ServerName foocdn.com
    ServerAlias www.foocdn.com
    DocumentRoot /Users/name/Desktop
</VirtualHost>

Hier ist eine Beispielkonfiguration für Nginx (ebenfalls ungetestet):

server {
    listen 80;
    root /Users/name/Desktop;
    server_name foocdn.com;
}

Vergessen Sie nicht, den Webserverdienst neu zu starten oder die neue Konfigurationsdatei neu zu laden.

Deltik
quelle
Ihre Antwort war gut, aber ich habe die Antwort akzeptiert, für die keine Installation erforderlich war
Daniel F
@DanielF: Oh, Sie betreiben also keinen lokalen Webserver?
Deltik
1
@ DeltaCorrect. Er möchte in der Lage sein, fooCDN.comnach einer Datei zu fragen, wenn er keine Internetverbindung hat.
BenjiWiebe
2

Sie können eine Proxyserver- Software verwenden, die das Umschreiben von URLs unterstützt , um die Aufgabe auszuführen . Viele Proxy-Server-Anwendungen unterstützen das Umschreiben von URLs. Beispielsweise unterstützt die Charles Web Debugging Proxy-Anwendung für Windows, Mac OS und Linux das Umschreiben von URLs . Sie können es auf Ihrem Mac-System installieren und dann die Browser auf dem System so konfigurieren, dass sie den Proxyserver verwenden.

Alternativ verfügt Apache , das kostenlos und Open Source ist, über die Module mod_proxy und mod_rewrite .

Mitmproxy ist kostenlos und kann auch auf einem Mac OS X-System ausgeführt werden.

Wenn Sie Elemente aus dem Cache Ihres Browsers ziehen müssen, um sie über den Proxyserver verfügbar zu machen, können Sie die unter Anzeigen des Chrome-Caches bereitgestellten Techniken verwenden (auf einfache Weise) . In Google Chrome können Sie beispielsweise chrome:\\cachedie Adressleiste des Browsers einfügen und dann die relevanten Elemente im Chrome-Cache suchen und an eine andere Stelle kopieren.

Mondpunkt
quelle
Kennen Sie eine andere Software als Charles, insbesondere freie Software?
Daniel F
Ihre Antwort ist gut, aber ich habe die andere Antwort akzeptiert, für die keine freie Software erforderlich ist.
Daniel F
Das ist gut; Die Lösung von Deltik ist gut für Ihre Situation. Ich habe ein paar kostenlose Alternativen zu Charles hinzugefügt.
Mondpunkt
1
@DanielF Ein weiterer Debug-Proxy ist Fiddler, der einen Alpha-OS-X-Build hat und Dateireaktionen und das Wiedergeben bestimmter Antworten unterstützt . Es ist feiner, als auch die gesamte Domain umzuleiten.
Bob
2

Klingt so, als ob gutes altes Wwwoffle Ihren Bedürfnissen entsprechen sollte. Es ist ein Proxy-Server, auf dem Sie Ressourcen für die Offline-Verwendung auswählen können.

MvG
quelle