Підроблений веб-сайт у режимі офлайн


15

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

Я використовую Mac і рішення, яке працює на рівні системи чи браузера, було б добре. Якщо він працює на рівні браузера, буде добре лише рішення Firefox або Chrome. Я не можу використовувати комп'ютер під керуванням Windows.


Чи можете ви користуватися комп'ютером Windows?
geek1011

@ geek1011 Ні, це було б неможливо
Даніель F

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)


Чи можете ви прокоментувати свій код, щоб я міг його краще зрозуміти. Мені ця відповідь дуже подобається, тому що мені не потрібно встановлювати багато програмного забезпечення
Daniel F

1
@DanielF Я додав кілька вбудованих коментарів. Дайте мені знати, якщо це має сенс, це, мабуть, один із найжорсткіших хак, які я написав. Я написав це лише з необхідності, тому що я постійно отримував кіоски браузера, чекаючи одного зайнятого ресурсу. Слід зазначити, що я використовував щенячий Linux, коли писав його, тому для деяких рядків може знадобитися запускати sudo.
технозавр

Примітка: деяким браузерам може знадобитися власне http-заголовок, а не просто "котировать" файл (хоча жоден з моїх не робив). Якщо у вас є веб-переглядач, який не сприймає / не виправляє подібну погану поведінку, ви можете використовувати stat, щоб отримати розмір файлу та використовувати його для друку потрібного заголовка.
технозавр

@technosaurus: Я намагаюся реалізувати щось подібне, однак я отримую помилку: чи illegal option -- eможете ви допомогти у цьому?
Анураг Пешне

@AnuragPeshne є декілька різноманітних реалізацій netcat; залежно від того, яку реалізацію ви використовуєте, можливо, ви зможете використовувати -cпараметр для запуску сценарію (такий же, як і -eбез sh -cчастини)
technosaurus

24

Це здається, що ви працюєте на локальному веб-сервері. Відмінно.

У вашій файловій системі Mac є файл, який називається /etc/hosts. Ви можете перенаправити всі запити fooCDN.comна свою локальну машину, додавши цей рядок у /etc/hosts:

127.0.0.1   foocdn.com www.foocdn.com

Для редагування вам знадобляться права root (суперкористувача) /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;
}

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


Ваша відповідь була гарна, але я прийняв відповідь, яка не вимагала моєї установки
Daniel F

@DanielF: О, значить, ви не працюєте на локальному веб-сервері?
Делтік

1
@Deltik Правильно. Він хоче мати можливість запитувати fooCDN.comфайл, коли у нього немає підключення до Інтернету.
BenjiWiebe

2

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

Крім того, Apache , який є безкоштовним та відкритим кодом, має модулі mod_proxy та mod_rewrite .

Mitmproxy безкоштовний і також працюватиме в системі Mac OS X.

Якщо вам потрібно витягнути елементи з кешу веб-переглядача, щоб зробити їх доступними через проксі-сервер, ви можете скористатися прийомами, передбаченими переглядом кешу Chrome (простий спосіб) . Наприклад, в Google Chrome ви можете ввести chrome:\\cacheадресний рядок веб-переглядача, а потім знайти відповідні елементи в кеші Chrome і скопіювати їх в іншому місці.


Чи знаєте ви про будь-яке програмне забезпечення, окрім Чарльза, особливо про безкоштовне програмне забезпечення?
Даніель Ф

Ваша відповідь хороша, але я прийняв іншу відповідь, яка не потребує невільного програмного забезпечення.
Даніель Ф

Це чудово; Рішення Deltik підходить для вашої ситуації. Я додав Чарльзу пару безкоштовних альтернатив.
Місячна точка

1
@DanielF Ще один проксі-сервер налагодження - це Fiddler, який має альфа-операційну систему X X і підтримує відповіді файлів та відтворення конкретних відповідей . Це більш дрібнозернисте, ніж перенаправлення всього домену.
Боб

2

Звучить як добрий старий wwwoffle повинен відповідати вашим потребам. Це проксі-сервер, на якому ви можете вибрати ресурси для офлайн-використання.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.