オフラインのときに偽のオンラインWebサイト


15

ローカルサーバーを使用してWebサイトを開発していますが、リモートに依存しています。リモートサーバーからのファイルのリクエストを偽造したいと思います。たとえば、ブラウザがfooCDN.com/bloatedLib.jsコンテンツのリクエストを行うと、/Users/name/Desktop/bloatedLib.jsが返されます。

私はMacを使用しており、システムまたはブラウザレベルで動作するソリューションで問題ありません。ブラウザレベルで機能する場合は、FirefoxまたはChromeソリューションのみが問題ありません。Windowsコンピューターを使用できません。


Windowsコンピューターを使用できますか?
geek1011

@ geek1011いいえ、それは不可能でしょう
ダニエルF

5
私があなたを正しく理解しているかどうかはわかりませんが、インターネットに接続していないときでもWebサイトにアクセスできるようにしようとしていますか?もしそうなら、ローカルコピーにアクセスしますか?プロキシサーバーのように?
LPChip

@LPChipオフラインでもjQueryのような外部依存関係を読み込む必要があります。これは他の人のリポジトリであるため、外部の依存関係をローカルにすることはできません。オフラインのときにブラウザのキャッシュにバージョンをロードすることができれば、tiは完璧でしょう。ほとんどのWebサイトはローカルサーバーにあります。
ダニエルF

あなたは、HTML5、「オフラインウェブアプリの」使用することができます
マイケル・

回答:


11

この小さなプロキシサーバーをハッキングして、不足しているファイルのみをダウンロードしました。127.0.0.1でキャッシュしたいサイトと0.0.0.0でブロックしたいサイトを指すように/ etc / hostsファイルを設定するだけです

#!/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 
'

すべてのファイルを1つのディレクトリに配置するため、バージョンの競合が発生する可能性があることに注意してください。(私はこれを意図的に行ったので、jqueryの500個のコピーを持たないでしょう)


コードをよりよく理解できるようにコメントしてください。私は多くのソフトウェアをインストールする必要はありませんので、これは多くのことを答える好き
ダニエル・F

1
@DanielFいくつかのインラインコメントを追加しました。それが理にかなっている場合、それはおそらく私が書いた最もハッキングなハックの1つです。忙しい1つのリソースをブラウザのストールに待たせ続けたので、私はそれを不必要に書きました。私が書いたときに子犬Linuxを使用していたことに言及する必要があるため、いくつかの行はsudoを実行する必要があるかもしれません。
テクノサウルス

注:一部のブラウザでは、ファイルを「キャッチ」するのではなく、実際のhttpヘッダーが必要になる場合があります(ただし、私の場合はどれも必要ありません)。この悪い振る舞いを受け入れない/修正しないブラウザを使用している場合、statを使用してファイルサイズを取得し、それを使用して適切なヘッダーをprintfできます。
テクノサウルス

@technosaurus:似たようなものを実装しようとしていますが、エラーが発生します:illegal option -- e、これを手伝ってもらえますか?
アヌラグペシュネ

@AnuragPeshneには、netcatのさまざまな実装がいくつかあります。使用している実装に応じ-cて、スクリプトを実行するためのパラメーターを使用できる場合があります(パーツ-eなしと同じ sh -c
テクノサウルス

24

ローカルWebサーバーを実行しているようです。優れた。

Macのファイルシステムには、というファイルがあります/etc/hostsfooCDN.com次の行を追加することにより、すべてのリクエストをローカルマシンにリダイレクトできます/etc/hosts

127.0.0.1   foocdn.com www.foocdn.com

編集するには、ルート(スーパーユーザー)権限が必要/etc/hostsです。

上記の行はfooCDN.com、Webサーバーがリッスンしている自分のコンピューターからロードすることを意味します。

ただし、ローカルで実行しているWebサーバーを指定しませんでした。Webサーバのドキュメントに続き、あなたはのドキュメントルート指す仮想ホストを作成する必要があり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;
}

Webサーバーサービスを再起動するか、新しい構成ファイルをリロードすることを忘れないでください。


あなたの答えは良かったのですが、何もインストールする必要のない答えを受け入れました
ダニエルF

@ダニエルF:ああ、あなたはローカルのWebサーバーを実行していないのですか?
デルティック

1
@Deltik正しい。彼は、インターネットに接続していないときにファイルを要求できるようにしたいと考えfooCDN.comています。
BenjiWiebe

2

URL書き換えをサポートするプロキシサーバーソフトウェアを使用して、タスクを実行できます。多くのプロキシサーバーアプリケーションはURL書き換えをサポートしています。たとえば、Windows、Mac OS、およびLinux用のCharles Webデバッグプロキシアプリケーションは、URL書き換えをサポートしています。Macシステムにインストールし、プロキシサーバーを使用するようにシステム上のブラウザーを構成できます。

あるいは、無料のオープンソースであるApacheには、mod_proxyおよびmod_rewriteモジュールがあります。

Mitmproxyは無料で、Mac OS Xシステムでも実行されます。

ブラウザのキャッシュからアイテムを取得してプロキシサーバー経由で利用できるようにする必要がある場合は、Chromeキャッシュの表示(簡単な方法)で提供されているテクニックを使用できます。たとえば、Google Chrome chrome:\\cacheでは、ブラウザーのアドレスバーに入力し、Chromeキャッシュで関連するアイテムを見つけて、他の場所にコピーできます。


Charles以外のソフトウェア、特にフリーソフトウェアを知っていますか?
ダニエルF

あなたの答えは良いですが、フリーでないソフトウェアを必要としない他の答えを受け入れました。
ダニエルF

それはいいです; Deltikのソリューションは、お客様の状況に適しています。Charlesにいくつかの無料の代替を追加しました。
ムーンポイント

1
@DanielF別のデバッグプロキシはFiddlerです。これはアルファOS Xビルドを持ち、ファイル応答特定の応答の再生をサポートします。ドメイン全体をリダイレクトするよりもきめ細かいです。
ボブ

2

古き良きwwwoffleはあなたのニーズに合っているはずです。これは、オフラインで使用するリソースを選択できるプロキシサーバーです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.