Site on-line falso quando off-line

15

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

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

Daniel F
fonte
Você é capaz de usar um computador Windows?
precisa saber é o seguinte
@ geek1011 Não, isso não seria possível #
Daniel F
5
Não tenho certeza se o entendi corretamente, mas você está tentando acessar um site mesmo quando não tem conexão com a Internet? e se sim, acesse uma cópia local? Como um servidor proxy faz?
LPChip
@LPChip Preciso que dependências externas como o jQuery sejam carregadas mesmo quando estou offline. Este é o repositório de outra pessoa, então não posso apenas tornar dependências externas locais. Se ele pudesse carregar a versão no cache do navegador quando estiver offline, seria perfeito. A maior parte do site está em um servidor local.
Daniel F
Você poderia usar HTML5 "aplicativos web off-line"
Michael

Respostas:

11

Eu cortei esse pequeno servidor proxy para baixar apenas os arquivos ausentes. Basta configurar o arquivo / etc / hosts para apontar os sites que você deseja armazenar em cache em 127.0.0.1 e os que 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, portanto, pode causar conflitos de versão. (Fiz isso intencionalmente para não ter 500 cópias do jquery)

technosaurus
fonte
Você pode comentar seu código para que eu possa entender melhor. Eu gosto desta resposta muito, porque eu não preciso instalar um monte de software
Daniel F
11
@DanielF Adicionei alguns comentários embutidos. Deixe-me saber se faz sentido, provavelmente é um dos hacks mais hacks que eu escrevi. Eu só escrevi por necessidade, porque eu ficava com as paradas do navegador esperando por um recurso ocupado. Devo mencionar que estava usando o Linux filhote quando o escrevi, portanto, algumas linhas podem precisar ser executadas no sudo.
Technosaurus
Nota: alguns navegadores podem precisar de um cabeçalho http real em vez de apenas "catting" o arquivo (apesar de nenhum dos meus precisar). Se você possui um navegador que não aceita / corrige esse mau comportamento, pode usar o stat para obter o tamanho do arquivo e usá-lo para imprimir um cabeçalho adequado.
Technosaurus
@technosaurus: Estou tentando implementar algo semelhante, mas estou recebendo um erro:, illegal option -- evocê pode ajudar com isso?
Anurag Peshne
@AnuragPeshne existem várias implementações variadas do netcat; dependendo de qual aplicação você está usando, você pode ser capaz de usar o -cparâmetro para a execução de um script (mesmo que -esem a sh -cparte)
Technosaurus
24

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

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

127.0.0.1   foocdn.com www.foocdn.com

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

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

Você não especificou qual servidor Web está executando localmente. Após a documentação do servidor web, você deve criar um host virtual que aponte a raiz do documento fooCDN.compara /Users/name/Desktop/.

Esta é uma configuração de amostra (eu não a 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>

Aqui está um exemplo de configuração para o 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 servidor da web ou recarregar o novo arquivo de configuração.

Deltik
fonte
A sua resposta foi boa, mas eu aceitei a resposta que não exigem a minha instalar nada
Daniel F
@DanielF: Ah, então você não está executando um servidor web local?
Deltik
11
@Deltik Correct. Ele quer pedir fooCDN.comum arquivo quando não tem conexão com a Internet.
precisa saber é o seguinte
2

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

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

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

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

ponto da lua
fonte
Você conhece algum software além de Charles, especialmente software livre?
Daniel F
Sua resposta é boa, mas aceitei a outra resposta que não requer software não livre.
9118 Daniel F
Isso é bom; A solução da Deltik é boa para a sua situação. Adicionei algumas alternativas gratuitas a Charles.
moonpoint
11
@DanielF Outro proxy de depuração é o Fiddler, que possui uma construção alpha OS X e suporta respostas de arquivos e repetindo respostas específicas . É mais refinado do que redirecionar todo o domínio também.
Bob
2

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

MvG
fonte