Fałszywa witryna internetowa w trybie offline

15

Tworzę witrynę za pomocą lokalnego serwera, ale mam zdalne zależności. Chciałbym sfałszować żądania plików ze zdalnych serwerów. Na przykład, gdy przeglądarka poprosi o fooCDN.com/bloatedLib.jstreść /Users/name/Desktop/bloatedLib.jszostanie zwrócona.

Używam komputera Mac i rozwiązanie, które działa na poziomie systemu lub przeglądarki byłoby w porządku. Jeśli działa na poziomie przeglądarki, tylko Firefox lub Chrome będą w porządku. Nie mogę korzystać z komputera z systemem Windows.

Daniel F.
źródło
Czy możesz korzystać z komputera z systemem Windows?
geek1011,
@ geek1011 Nie, to nie byłoby możliwe
Daniel F
5
Nie jestem pewien, czy dobrze cię rozumiem, ale czy próbujesz uzyskać dostęp do strony internetowej, nawet jeśli nie masz połączenia z Internetem? a jeśli tak, uzyskać dostęp do lokalnej kopii? Tak jak serwer proxy?
LPChip
@LPChip Potrzebuję załadować zewnętrzne zależności, takie jak jQuery, nawet gdy jestem offline. To jest repozytorium innej osoby, więc nie mogę po prostu ustawić lokalnych zależności zewnętrznych. Gdyby mógł po prostu załadować wersję do pamięci podręcznej przeglądarki, gdy jest w trybie offline, byłoby idealnie. Większość witryny znajduje się na serwerze lokalnym.
Daniel F
Możesz użyć HTML5 „offline web apps”
Michael

Odpowiedzi:

11

Zhakowałem ten mały serwer proxy, aby pobierać tylko brakujące pliki. Po prostu skonfiguruj plik / etc / hosts, aby wskazywał witryny, które chcesz buforować, na 127.0.0.1 i te, które chcesz zablokować na 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 
'

Pamiętaj, że umieszcza wszystkie pliki w jednym katalogu, więc może powodować konflikty wersji. (Zrobiłem to celowo, aby nie mieć 500 kopii jquery)

technozaur
źródło
Czy możesz skomentować swój kod, aby lepiej go zrozumieć. Bardzo podoba mi się ta odpowiedź, ponieważ nie muszę instalować dużo oprogramowania
Daniel F
1
@DanielF Dodałem kilka wbudowanych komentarzy. Daj mi znać, jeśli ma to sens, to prawdopodobnie jeden z najbardziej hackowanych hacków, jakie napisałem. Napisałem to tylko z konieczności, ponieważ ciągle czekałem na przeciągnięcie przeglądarki na jeden zajęty zasób. Powinienem wspomnieć, że podczas pisania użyłem szczeniaka Linuksa, więc niektóre linie mogą wymagać uruchomienia sudo.
technozaur
Uwaga: niektóre przeglądarki mogą wymagać rzeczywistego nagłówka http zamiast po prostu „przechwytywać” plik (chociaż żadna z moich nie). Jeśli masz przeglądarkę, która nie akceptuje / naprawia tego złego zachowania, możesz użyć stat, aby uzyskać rozmiar pliku i użyć go do wydrukowania odpowiedniego nagłówka.
technozaur
@technosaurus: Próbuję zaimplementować coś podobnego, jednak pojawia się błąd: illegal option -- eczy możesz w tym pomóc?
Anurag Peshne,
@AnuragPeshne istnieje kilka różnych implementacji netcat; w zależności od implementacji, której używasz, możesz użyć -cparametru do uruchomienia skryptu (tak samo jak -ebez tej sh -cczęści)
technosaurus
24

Wygląda na to, że prowadzisz lokalny serwer internetowy. Doskonały.

W systemie plików komputera Mac znajduje się plik o nazwie /etc/hosts. Możesz przekierować wszystkie żądania na fooCDN.comswój komputer lokalny, dodając ten wiersz w /etc/hosts:

127.0.0.1   foocdn.com www.foocdn.com

Aby edytować, będziesz potrzebować uprawnień administratora (superużytkownika) /etc/hosts.

Powyższa linia oznacza, że fooCDN.comładuje się z twojego komputera, na którym nasłuchuje serwer WWW.

Nie określiłeś jednak, jakiego serwera używasz lokalnie. W następstwie dokumentacji serwera WWW, należy utworzyć wirtualnego hosta, który wskazuje głównego katalogu dokumentów fooCDN.comdo /Users/name/Desktop/.

Oto przykładowa konfiguracja (nie testowałem jej osobiście), której możesz spróbować użyć z Apache :

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

Oto przykładowa konfiguracja Nginx (również niesprawdzona):

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

Nie zapomnij zrestartować usługi serwera WWW lub ponownie załadować nowy plik konfiguracyjny.

Deltik
źródło
Twoja odpowiedź była dobra, ale zaakceptowałem odpowiedź, która nie wymagała mojej instalacji
Daniel F
@DanielF: Och, więc nie masz lokalnego serwera WWW?
Deltik,
1
@Deltik Poprawnie. On chce , aby móc poprosić fooCDN.como plik, kiedy nie ma połączenia z Internetem.
BenjiWiebe,
2

Do wykonania zadania można użyć oprogramowania serwera proxy , które obsługuje przepisywanie adresów URL . Wiele aplikacji serwera proxy obsługuje przepisywanie adresów URL. Na przykład aplikacja proxy sieci Web do debugowania Charlesa dla systemów Windows, Mac OS i Linux obsługuje przepisywanie adresów URL . Możesz zainstalować go w systemie Mac, a następnie skonfigurować przeglądarki w systemie do korzystania z serwera proxy.

Alternatywnie, Apache , który jest darmowy i open source, ma moduły mod_proxy i mod_rewrite .

Mitmproxy jest bezpłatny i będzie działał również w systemie Mac OS X.

Jeśli musisz wyciągnąć elementy z pamięci podręcznej przeglądarki, aby udostępnić je za pośrednictwem serwera proxy, możesz skorzystać z technik podanych w sekcji Przeglądanie pamięci podręcznej przeglądarki Chrome (prosty sposób) . Np. W Google Chrome możesz umieścić chrome:\\cachew pasku adresu przeglądarki, a następnie zlokalizować odpowiednie elementy w pamięci podręcznej Chrome i skopiować je gdzie indziej.

punkt księżycowy
źródło
Czy znasz jakieś oprogramowanie inne niż Charles, zwłaszcza wolne oprogramowanie?
Daniel F
Twoja odpowiedź jest dobra, ale zaakceptowałem inną odpowiedź, która nie wymaga niewolnego oprogramowania.
Daniel F
W porządku; Rozwiązanie Deltik jest dobre dla twojej sytuacji. Dodałem kilka darmowych alternatyw dla Charlesa.
punkt księżycowy
1
@DanielF Kolejnym serwerem debugującym jest Fiddler, który ma wersję alpha OS X i obsługuje odpowiedzi plików oraz odtwarzanie określonych odpowiedzi . Jest też bardziej precyzyjny niż przekierowywanie całej domeny.
Bob
2

Brzmi jak stary dobry WWWOFFLE powinien swoich potrzeb. Jest to serwer proxy, w którym możesz wybierać zasoby do użytku offline.

MvG
źródło