Поддельный онлайн-сайт, когда офлайн

15

Я занимаюсь разработкой веб-сайта с использованием локального сервера, но у меня есть удаленные зависимости. Я хотел бы подделать запросы на файлы с удаленных серверов. Например, когда браузер делает запрос на fooCDN.com/bloatedLib.jsсодержимое /Users/name/Desktop/bloatedLib.jsбудет возвращено.

Я использую Mac, и решение, которое работает на уровне системы или браузера, подойдет. Если он работает на уровне браузера, то подойдет только решение Firefox или Chrome. Я не могу использовать компьютер с Windows.

Даниэль Ф
источник
Вы можете использовать компьютер с Windows?
geek1011
@ geek1011 Нет, это было бы невозможно
Даниэль Ф
5
Не уверен, правильно ли я вас понимаю, но пытаетесь ли вы получить доступ к веб-сайту, даже если у вас нет подключения к Интернету? и если да, доступ к локальной копии? Как прокси-сервер делает?
LPChip
@LPChip Мне нужно загружать внешние зависимости, такие как jQuery, даже когда я не в сети. Это чей-то репозиторий, поэтому я не могу просто сделать внешние зависимости локальными. Если бы он мог просто загрузить версию в кеш браузера, когда он не в сети, было бы идеально. Большая часть сайта находится на локальном сервере.
Даниэль Ф
Вы можете использовать HTML5 «автономные веб-приложения»
Майкл

Ответы:

11

Я взломал этот маленький прокси-сервер, чтобы загрузить только недостающие файлы. Просто настройте файл / etc / hosts так, чтобы он указывал сайты, которые вы хотите кэшировать, на 127.0.0.1, а те, которые вы хотите заблокировать на 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 
'

Обратите внимание, что он помещает все файлы в один каталог, поэтому может вызвать конфликт версий. (Я сделал это намеренно, чтобы у меня не было 500 копий jquery)

technosaurus
источник
Можете ли вы прокомментировать свой код, чтобы я мог лучше понять его. Мне очень нравится этот ответ, потому что мне не нужно устанавливать много программного обеспечения
Daniel F
1
@DanielF Я добавил несколько встроенных комментариев. Дайте мне знать, если это имеет смысл, это, вероятно, один из самых хакерских хаков, которые я написал. Я только написал это по необходимости, потому что я продолжал получать киоски браузера, ожидая одного занятого ресурса. Я должен упомянуть, что я использовал Puppy Linux, когда писал его, поэтому некоторые строки, возможно, придется запускать sudo.
технозавр
Примечание: некоторые браузеры могут нуждаться в реальном http-заголовке вместо того, чтобы просто «перехватывать» файл (хотя ни один из моих не делал). Если у вас есть браузер, который не принимает / не исправляет это плохое поведение, вы можете использовать stat для получения размера файла и использовать его для печати правильного заголовка.
технозавр
@technosaurus: я пытаюсь реализовать нечто подобное, однако я получаю сообщение об ошибке: illegal option -- eвы можете помочь с этим?
Анураг Пешне
@AnuragPeshne есть несколько различных реализаций netcat; в зависимости от того, какую реализацию вы используете, вы можете использовать -cпараметр для запуска скрипта (так же, как и -eбез sh -cдетали)
технозавр
24

Похоже, вы используете локальный веб-сервер. Отлично.

В файловой системе вашего Mac есть файл с именем /etc/hosts. Вы можете перенаправить все запросы на fooCDN.comсвой локальный компьютер, добавив эту строку в /etc/hosts:

127.0.0.1   foocdn.com www.foocdn.com

Для редактирования вам понадобятся права суперпользователя /etc/hosts.

Вышеуказанная строка означает, что fooCDN.comбудет загружаться с вашего собственного компьютера, где веб-сервер прослушивает.

Вы не указали, какой веб-сервер вы используете локально. После документации веб - сервера, вы должны создать виртуальный хост , который указывает на корневой каталог документов fooCDN.comдля /Users/name/Desktop/.

Это пример конфигурации (я сам ее не тестировал), которую вы можете попробовать использовать с Apache :

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

Вот пример конфигурации для Nginx (также не протестирован):

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

Не забудьте перезапустить службу веб-сервера или перезагрузить новый файл конфигурации.

Deltik
источник
Ваш ответ был хорошим, но я принял ответ, который не требовал от меня установки чего-либо
Даниэль Ф
@DanielF: О, значит, вы не используете локальный веб-сервер?
Дельтик
1
@ Делтик Правильно. Он хочет иметь возможность запросить fooCDN.comфайл, когда у него нет подключения к Интернету.
BenjiWiebe
2

Вы могли бы использовать программное обеспечение прокси-сервера, которое поддерживает перезапись URL для выполнения задачи. Многие приложения прокси-сервера поддерживают перезапись URL. Например, прокси-приложение Charles Web Debugging Proxy для Windows, Mac OS и Linux поддерживает перезапись URL-адресов . Вы можете установить его в своей системе Mac, а затем настроить браузеры в системе для использования прокси-сервера.

Кроме того, Apache , который является бесплатным и открытым исходным кодом, имеет модули mod_proxy и mod_rewrite .

Mitmproxy бесплатен и также будет работать в системе Mac OS X.

Если вам нужно извлечь элементы из кэша вашего браузера, чтобы сделать их доступными через прокси-сервер, вы можете использовать методы, представленные в разделе Просмотр кэша Chrome (простой способ) . Например, в Google Chrome вы можете поместить chrome:\\cacheв адресную строку браузера, а затем найти соответствующие элементы в кэше Chrome и скопировать их в другое место.

moonpoint
источник
Знаете ли вы какое-либо программное обеспечение, кроме Чарльза, особенно бесплатное программное обеспечение?
Даниэль Ф
Ваш ответ хороший, но я принял другой ответ, который не требует несвободного программного обеспечения.
Даниэль Ф
Все в порядке; Решение Deltik подходит для вашей ситуации. Я добавил пару бесплатных альтернатив Чарльзу.
лунная точка
1
@DanielF Другим отладочным прокси-сервером является Fiddler, который имеет альфа- версию OS X и поддерживает ответы файлов и воспроизведение определенных ответов . Это более детально, чем перенаправление всего домена тоже.
Боб
2

Похоже, старый добрый wwwoffle должен соответствовать вашим потребностям. Это прокси-сервер, на котором вы можете выбирать ресурсы для автономного использования.

MVG
источник