16

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

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

4 ответа4

25

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

В файловой системе вашего 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;
}

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

12

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

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 и скопировать их в другое место.

2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .