Sito Web online falso quando offline


15

Sto sviluppando un sito Web utilizzando un server locale, ma ho dipendenze remote. Vorrei fingere richieste di file da server remoti. Ad esempio, quando il browser effettua una richiesta per fooCDN.com/bloatedLib.jsil contenuto di /Users/name/Desktop/bloatedLib.jsverrà restituito.

Uso un mac e una soluzione che funziona a livello di sistema o browser andrebbe bene. Se funziona a livello di browser, andrà bene solo una soluzione Firefox o Chrome. Non riesco a usare un computer Windows.


Sei in grado di utilizzare un computer Windows?
geek1011

@ geek1011 No, non sarebbe possibile
Daniel F

5
Non sei sicuro di averti compreso correttamente, ma stai cercando di essere in grado di accedere a un sito Web anche quando non hai una connessione a Internet? e in tal caso, accedere a una copia locale? Come fa un server proxy?
LPChip

@LPChip Ho bisogno di dipendenze esterne come jQuery per essere caricate anche quando sono offline. Questo è il repository di qualcun altro, quindi non posso semplicemente rendere locali le dipendenze esterne. Se potesse semplicemente caricare la versione nella cache del browser quando è offline, sarebbe perfetto. La maggior parte del sito Web si trova in un server locale.
Daniel F,

È possibile utilizzare HTML5 "app Web offline"
Michael,

Risposte:


11

Ho hackerato insieme questo piccolo server proxy per scaricare solo i file mancanti. Basta impostare il file / etc / hosts per puntare i siti che si desidera memorizzare nella cache su 127.0.0.1 e quelli che si desidera bloccare su 0.0.0.0

#!/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 
'

Nota che mette tutti i file in una directory, quindi potrebbe causare conflitti di versione. (L'ho fatto intenzionalmente in modo da non avere 500 copie di jquery)


Puoi commentare il tuo codice in modo che io possa capirlo meglio. Mi piace molto questa risposta perché non ho bisogno di installare molto software
Daniel F

1
@DanielF Ho aggiunto alcuni commenti in linea. Fammi sapere se ha senso, è probabilmente uno degli hack più hacker che abbia scritto. L'ho scritto solo per necessità perché continuavo a ottenere bancarelle del browser in attesa di una risorsa occupata. Dovrei menzionare che stavo usando Puppy Linux quando l'ho scritto, quindi potrebbe essere necessario eseguire alcune righe sudo.
technosaurus,

Nota: alcuni browser potrebbero aver bisogno di un'intestazione http effettiva anziché semplicemente "catturare" il file (anche se nessuno dei miei lo ha fatto). Se si dispone di un browser che non accetta / corregge questo comportamento scorretto, è possibile utilizzare stat per ottenere le dimensioni del file e utilizzarlo per stampare un'intestazione corretta.
technosaurus,

@technosaurus: sto cercando di implementare qualcosa di simile, tuttavia sto ricevendo un errore:, illegal option -- epuoi aiutarmi con questo?
Anurag Peshne,

@AnuragPeshne ci sono diverse implementazioni di netcat; a seconda dell'implementazione che stai usando, potresti essere in grado di usare il -cparametro per eseguire uno script (lo stesso che -esenza la sh -cparte)
technosaurus

24

Sembra che tu stia eseguendo un server web locale. Eccellente.

Nel filesystem del tuo Mac, c'è un file chiamato /etc/hosts. Puoi reindirizzare tutte le richieste fooCDN.comal tuo computer locale aggiungendo questa riga in /etc/hosts:

127.0.0.1   foocdn.com www.foocdn.com

Per modificare dovrai disporre delle autorizzazioni di root (super user) /etc/hosts.

La riga sopra indica che fooCDN.comverrà caricata dal tuo computer, dove un web server è in ascolto.

Tuttavia, non hai specificato quale server web stai eseguendo localmente. Seguendo la documentazione del server Web, è necessario creare un host virtuale che punti la radice del documento fooCDN.coma /Users/name/Desktop/.

Questa è una configurazione di esempio (non l'ho testata da sola) che puoi provare ad usare con Apache :

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

Ecco una configurazione di esempio per Nginx (anche non testato):

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

Non dimenticare di riavviare il servizio web server o ricaricare il nuovo file di configurazione.


La tua risposta è stata buona, ma ho accettato la risposta che non richiedeva l'installazione di nulla
Daniel F

@DanielF: Oh, quindi non stai usando un web server locale?
Deltik,

1
@Deltik Correct. Egli vuole essere in grado di chiedere fooCDN.comun file quando non ha alcuna connessione a Internet.
BenjiWiebe,

2

È possibile utilizzare il software del server proxy che supporta la riscrittura degli URL per eseguire l'attività. Molte applicazioni del server proxy supportano la riscrittura degli URL. Ad esempio, l' applicazione proxy Charles Web Debugging per Windows, Mac OS e Linux supporta la riscrittura degli URL . È possibile installarlo sul proprio sistema Mac e quindi configurare i browser sul sistema per utilizzare il server proxy.

In alternativa, Apache , che è gratuito e open source, ha moduli mod_proxy e mod_rewrite .

Mitmproxy è gratuito e funziona anche su un sistema Mac OS X.

Se è necessario estrarre gli elementi dalla cache del browser per renderli disponibili tramite il server proxy, è possibile utilizzare le tecniche fornite nella Visualizzazione della cache di Chrome (il modo più semplice) . Ad esempio, in Google Chrome puoi inserire chrome:\\cachela barra degli indirizzi del browser e quindi individuare gli elementi pertinenti nella cache di Chrome e copiarli altrove.


Conosci qualche software diverso da Charles, in particolare software libero?
Daniel F,

La tua risposta è buona, ma ho accettato l'altra risposta che non richiede software non libero.
Daniel F,

Va bene; La soluzione di Deltik è buona per la tua situazione. Ho aggiunto un paio di alternative gratuite a Charles.
moonpoint

1
@DanielF Un altro proxy di debug è Fiddler, che ha una build alpha OS X e supporta le risposte ai file e la riproduzione di risposte specifiche . È più fine che reindirizzare anche l'intero dominio.
Bob

2

Suona come un buon vecchio wwwoffle dovrebbe soddisfare le tue esigenze. È un server proxy in cui è possibile selezionare risorse per l'utilizzo offline.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.