Site falso on-line quando off-line

16

Estou desenvolvendo um site usando um servidor local, mas tenho dependências remotas. Eu gostaria de falsificar solicitações de arquivos de servidores remotos. Por exemplo, quando o navegador fizer uma solicitação para fooCDN.com/bloatedLib.js , o conteúdo de /Users/name/Desktop/bloatedLib.js será retornado.

Eu uso um mac e uma solução que funcione no nível do sistema ou do navegador estaria bem. Se funcionar no nível do navegador, somente uma solução do Firefox ou do Chrome ficará bem. Não consigo usar um computador com Windows.

    
por Daniel F 09.08.2015 / 15:00

4 respostas

12

Eu juntei este pequeno servidor proxy para baixar apenas arquivos perdidos. Basta configurar seu arquivo / etc / hosts para apontar os sites que você deseja armazenar em cache em 127.0.0.1 e aqueles que você deseja bloquear em 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 
'

Observe que ele coloca todos os arquivos em um diretório, por isso pode causar conflitos de versão. (Eu fiz isso intencionalmente para não ter 500 cópias de jquery)

    
por 10.08.2015 / 13:55
25

Parece que você está executando um servidor da Web local. Excelente.

No sistema de arquivos do seu Mac, existe um arquivo chamado /etc/hosts . Você pode redirecionar todas as solicitações de fooCDN.com para sua máquina local adicionando esta linha em /etc/hosts :

127.0.0.1   foocdn.com www.foocdn.com

Você precisará de permissões root (superusuário) para editar /etc/hosts .

A linha acima significa que fooCDN.com será carregado a partir do seu próprio computador, onde um servidor da web está escutando.

Você não especificou qual servidor web está sendo executado localmente. Seguindo a documentação do servidor da Web, você deve criar um host virtual que aponte a raiz do documento de fooCDN.com para /Users/name/Desktop/ .

Esta é uma configuração de amostra (eu mesmo não testei) que você pode tentar usar com o Apache :

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

Veja um exemplo de configuração para Nginx (também não testado):

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

Não se esqueça de reiniciar o serviço do seu servidor da Web ou recarregar o novo arquivo de configuração.

    
por 09.08.2015 / 16:56
2

Você pode usar o software servidor proxy que suporta URL reescrita para realizar a tarefa. Muitos aplicativos de servidor proxy suportam a regravação de URL. Por exemplo, o Aplicativo Charles Web Debugging Proxy para Windows, Mac OS e Linux suporta reescrita de URL . Você pode instalá-lo em seu sistema Mac e configurar os navegadores no sistema para usar o servidor proxy.

Como alternativa, o Apache , que é gratuito e de código aberto, tem mod_proxy e mod_rewrite módulos.

O Mitmproxy é gratuito e também será executado em um sistema Mac OS X.

Se você precisar extrair itens do cache do seu navegador para disponibilizá-los através do servidor proxy, poderá usar as técnicas fornecidas em Exibindo o cache do Chrome (o caminho mais fácil) . Por exemplo, no Google Chrome, você pode colocar chrome:\cache na barra de endereço do navegador e, em seguida, localizar os itens relevantes no cache do Google Chrome e copiá-los em outro lugar.

    
por 09.08.2015 / 16:49
2

Parece que o bom e velho wwwoffle deve atender às suas necessidades. É um servidor proxy em que você pode selecionar recursos para uso off-line.

    
por 12.08.2015 / 14:02