Situs web palsu online saat offline

15

Saya mengembangkan situs web menggunakan server lokal, tetapi saya memiliki dependensi jarak jauh. Saya ingin memalsukan permintaan file dari server jarak jauh. Misalnya, ketika browser meminta fooCDN.com/bloatedLib.jskonten /Users/name/Desktop/bloatedLib.jsakan dikembalikan.

Saya menggunakan mac dan solusi yang berfungsi pada tingkat sistem atau browser akan baik-baik saja. Jika berfungsi di tingkat browser, hanya solusi Firefox atau Chrome yang akan baik-baik saja. Saya tidak bisa menggunakan komputer windows.

Daniel F
sumber
Apakah Anda dapat menggunakan komputer Windows?
geek1011
@ geek1011 Tidak, itu tidak mungkin
Daniel F
5
Tidak yakin apakah saya mengerti Anda dengan benar, tetapi apakah Anda mencoba untuk dapat mengakses situs web bahkan ketika Anda tidak memiliki koneksi ke internet? dan jika demikian, akses salinan lokal? Seperti halnya server proxy?
LPChip
@LPChip Saya membutuhkan dependensi eksternal seperti jQuery untuk dimuat bahkan ketika saya sedang offline. Ini adalah repositori orang lain, jadi saya tidak bisa membuat dependensi eksternal menjadi lokal. Kalau saja bisa memuat versi dalam cache browser ketika sedang offline ti akan sempurna. Sebagian besar situs web berada di server lokal.
Daniel F
Anda dapat menggunakan HTML5 "aplikasi web offline"
Michael

Jawaban:

11

Saya meretas server proxy kecil ini untuk hanya mengunduh file yang hilang. Cukup atur file / etc / hosts Anda ke situs-situs yang ingin Anda cache pada 127.0.0.1 dan yang ingin Anda blokir di 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 
'

Perhatikan bahwa ia meletakkan semua file dalam satu direktori, sehingga dapat menyebabkan konflik versi. (Saya melakukan ini dengan sengaja sehingga saya tidak akan memiliki 500 salinan jquery)

technosaurus
sumber
Bisakah Anda mengomentari kode Anda sehingga saya dapat memahaminya dengan lebih baik. Saya sangat suka jawaban ini karena saya tidak perlu menginstal banyak perangkat lunak
Daniel F
1
@DanielF Saya menambahkan beberapa komentar sebaris. Beri tahu saya jika ini masuk akal, itu mungkin salah satu peretasan yang paling bodoh yang pernah saya tulis. Saya hanya menulis itu karena kebutuhan karena saya terus mendapatkan kios peramban menunggu satu sumber daya sibuk. Saya harus menyebutkan saya menggunakan puppy Linux ketika saya menulisnya, jadi beberapa baris mungkin perlu dijalankan sudo.
technosaurus
Catatan: beberapa browser mungkin memerlukan header http yang sebenarnya alih-alih hanya "catting" file (meskipun tidak ada yang melakukannya). Jika Anda memiliki browser yang tidak menerima / memperbaiki perilaku buruk ini, Anda dapat menggunakan stat untuk mendapatkan ukuran file dan menggunakannya untuk mencetak header yang tepat.
technosaurus
@ technosaurus: Saya mencoba menerapkan sesuatu yang serupa, namun saya mendapatkan kesalahan:, illegal option -- edapatkah Anda membantu dengan ini?
Anurag Peshne
@AnuragPeshne ada beberapa implementasi netcat yang bervariasi; tergantung pada implementasi yang Anda gunakan, Anda mungkin dapat menggunakan -cparameter untuk menjalankan skrip (sama seperti -etanpa sh -cbagian)
technosaurus
24

Sepertinya Anda menjalankan server web lokal. Luar biasa.

Di sistem file Mac Anda, ada file bernama /etc/hosts. Anda dapat mengalihkan semua permintaan fooCDN.comke mesin lokal Anda dengan menambahkan baris ini di /etc/hosts:

127.0.0.1   foocdn.com www.foocdn.com

Anda akan memerlukan izin root (pengguna super) untuk mengedit /etc/hosts.

Baris di atas berarti bahwa fooCDN.comakan memuat dari komputer Anda sendiri, di mana server web mendengarkan.

Anda tidak menentukan server web apa yang Anda jalankan secara lokal. Mengikuti dokumentasi server web, Anda harus membuat host virtual yang mengarahkan akar dokumen fooCDN.comke /Users/name/Desktop/.

Ini adalah contoh konfigurasi (saya belum mengujinya sendiri) yang dapat Anda coba gunakan dengan Apache :

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

Berikut ini contoh konfigurasi untuk Nginx (juga belum diuji):

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

Jangan lupa untuk me-restart layanan server web Anda atau memuat ulang file konfigurasi baru.

Deltik
sumber
Jawaban Anda baik, tetapi saya telah menerima jawaban yang tidak mengharuskan saya menginstal apa pun
Daniel F
@DanielF: Oh, jadi Anda tidak menjalankan server web lokal?
Deltik
1
@Deltik Benar. Dia ingin dapat meminta fooCDN.comfile ketika dia tidak memiliki koneksi internet.
BenjiWiebe
2

Anda dapat menggunakan perangkat lunak server proxy yang mendukung penulisan ulang URL untuk menyelesaikan tugas. Banyak aplikasi server proxy mendukung penulisan ulang URL. Misalnya, Aplikasi Proxy Charles Web Debugging Proxy untuk Windows, Mac OS, dan Linux mendukung penulisan ulang URL . Anda dapat menginstalnya di sistem Mac Anda dan kemudian mengkonfigurasi browser pada sistem untuk menggunakan server proxy.

Atau, Apache , yang gratis dan open source, memiliki modul mod_proxy dan mod_rewrite .

Mitmproxy gratis dan juga akan berjalan pada sistem Mac OS X.

Jika Anda perlu menarik item dari cache browser Anda agar tersedia melalui server proxy, Anda dapat menggunakan teknik yang disediakan di Melihat cache Chrome (cara mudah) . Misalnya, di Google Chrome Anda dapat memasukkan chrome:\\cachebilah alamat browser dan kemudian menemukan item yang relevan di cache Chrome dan menyalinnya di tempat lain.

titik bulan
sumber
Apakah Anda tahu ada perangkat lunak selain Charles, terutama perangkat lunak bebas?
Daniel F
Jawaban Anda bagus, tetapi saya menerima jawaban lain yang tidak memerlukan perangkat lunak bebas.
Daniel F
Tidak apa-apa; Solusi Deltik adalah solusi yang bagus untuk situasi Anda. Saya menambahkan beberapa alternatif gratis untuk Charles.
moonpoint
1
@DanielF Proksi debug lain adalah Fiddler, yang memiliki build alpha OS X dan mendukung respons file dan memutar ulang respons spesifik . Ini lebih halus daripada mengarahkan seluruh domain juga.
Bob
2

Kedengarannya seperti wwwoffle tua yang bagus harus sesuai dengan kebutuhan Anda. Ini adalah server proxy tempat Anda dapat memilih sumber daya untuk penggunaan offline.

MvG
sumber