Sitio web falso en línea cuando está desconectado

15

Estoy desarrollando un sitio web utilizando un servidor local, pero tengo dependencias remotas. Me gustaría falsificar solicitudes de archivos de servidores remotos. Por ejemplo, cuando el navegador realiza una solicitud para que se devuelva fooCDN.com/bloatedLib.jsel contenido de /Users/name/Desktop/bloatedLib.js.

Utilizo una Mac y una solución que funciona a nivel del sistema o del navegador estaría bien. Si funciona en el nivel del navegador, solo una solución de Firefox o Chrome estará bien. No puedo usar una computadora con Windows.

Daniel F
fuente
¿Eres capaz de usar una computadora con Windows?
geek1011
@ geek1011 No, eso no sería posible
Daniel F
55
No estoy seguro si te entiendo correctamente, pero ¿estás tratando de poder acceder a un sitio web incluso cuando no tienes conexión a Internet? y si es así, acceda a una copia local? ¿Como lo hace un servidor proxy?
LPChip
@LPChip Necesito que se carguen dependencias externas como jQuery incluso cuando estoy desconectado. Este es el repositorio de otra persona, por lo que no puedo hacer que las dependencias externas sean locales. Si solo pudiera cargar la versión en la memoria caché del navegador cuando está fuera de línea, sería perfecto. La mayor parte del sitio web está en un servidor local.
Daniel F
Podrías usar HTML5 "aplicaciones web sin conexión"
Michael

Respuestas:

11

Pirateé este pequeño servidor proxy para descargar solo los archivos que faltan. Simplemente configure su archivo / etc / hosts para señalar los sitios que desea almacenar en caché en 127.0.0.1 y los que desea bloquear en 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 
'

Tenga en cuenta que coloca todos los archivos en un directorio, por lo que puede causar conflictos de versión. (Hice esto intencionalmente para no tener 500 copias de jquery)

technosaurus
fuente
¿Puedes comentar tu código para que pueda entenderlo mejor? Me gusta mucho esta respuesta porque no necesito instalar mucho software
Daniel F
1
@DanielF Agregué algunos comentarios en línea. Avíseme si tiene sentido, probablemente sea uno de los hacks más hackeos que he escrito. Solo lo escribí por necesidad porque seguía recibiendo puestos de navegador esperando un recurso ocupado. Debo mencionar que estaba usando Linux cachorro cuando lo escribí, por lo que es posible que algunas líneas deban ejecutarse sudo.
technosaurus
Nota: algunos navegadores pueden necesitar un encabezado http real en lugar de simplemente "capturar" el archivo (aunque ninguno de los míos lo hizo). Si tiene un navegador que no acepta / corrige este mal comportamiento, puede usar stat para obtener el tamaño del archivo y usarlo para imprimir un encabezado adecuado.
technosaurus
@technosaurus: Estoy tratando de implementar algo similar, pero recibo un error: ¿ illegal option -- epueden ayudarme con esto?
Anurag Peshne
@AnuragPeshne hay varias implementaciones variadas de netcat; dependiendo de la implementación que esté utilizando, puede usar el -cparámetro para ejecutar un script (igual que -esin la sh -cparte)
technosaurus
24

Parece que estás ejecutando un servidor web local. Excelente.

En el sistema de archivos de su Mac, hay un archivo llamado /etc/hosts. Puede redirigir todas las solicitudes fooCDN.coma su máquina local agregando esta línea en /etc/hosts:

127.0.0.1   foocdn.com www.foocdn.com

Necesitará permisos de root (superusuario) para editar /etc/hosts.

La línea anterior significa que fooCDN.comse cargará desde su propia computadora, donde escucha un servidor web.

Sin embargo, no especificó qué servidor web está ejecutando localmente. A raíz de la documentación del servidor web, debe crear un servidor virtual que apunta la raíz del documento de fooCDN.coma /Users/name/Desktop/.

Esta es una configuración de muestra (no la he probado yo mismo) que puede intentar usar con Apache :

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

Aquí está un ejemplo de configuración para Nginx (también no probado):

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

No olvide reiniciar el servicio del servidor web o volver a cargar el nuevo archivo de configuración.

Deltik
fuente
Su respuesta fue buena, pero acepté la respuesta que no requería que instalara nada
Daniel F
@DanielF: Oh, ¿entonces no estás ejecutando un servidor web local?
Deltik
1
@Deltik Correcto. Él quiere ser capaz de pedir fooCDN.compara un archivo cuando no tiene conexión a Internet.
BenjiWiebe
2

Puede utilizar el software del servidor proxy que admite la reescritura de URL para realizar la tarea. Muchas aplicaciones de servidor proxy admiten la reescritura de URL. Por ejemplo, la aplicación de proxy de depuración web de Charles para Windows, Mac OS y Linux admite la reescritura de URL . Puede instalarlo en su sistema Mac y luego configurar los navegadores en el sistema para usar el servidor proxy.

Alternativamente, Apache , que es gratuito y de código abierto, tiene módulos mod_proxy y mod_rewrite .

Mitmproxy es gratuito y también se ejecutará en un sistema Mac OS X.

Si necesita extraer elementos de la memoria caché de su navegador para que estén disponibles a través del servidor proxy, puede utilizar las técnicas proporcionadas en Visualización de la memoria caché de Chrome (la forma más fácil) . Por ejemplo, en Google Chrome puede colocar chrome:\\cacheen la barra de direcciones del navegador y luego ubicar los elementos relevantes en la memoria caché de Chrome y copiarlos en otro lugar.

punto de luna
fuente
¿Conoces algún otro software que no sea Charles, especialmente el software libre?
Daniel F
Su respuesta es buena, pero acepté la otra respuesta que no requiere software no libre.
Daniel F
Esta bien; La solución de Deltik es buena para su situación. Agregué un par de alternativas gratuitas a Charles.
luna
1
@DanielF Otro proxy de depuración es Fiddler, que tiene una compilación alpha OS X y admite respuestas de archivos y repite respuestas específicas . Es más fino que redirigir todo el dominio también.
Bob
2

Parece que el buen viejo wwwoffle debería satisfacer tus necesidades. Es un servidor proxy donde puede seleccionar recursos para uso fuera de línea.

MvG
fuente