![离线时伪造在线网站](https://linux22.com/image/1461006/%E7%A6%BB%E7%BA%BF%E6%97%B6%E4%BC%AA%E9%80%A0%E5%9C%A8%E7%BA%BF%E7%BD%91%E7%AB%99.png)
我正在使用本地服务器开发网站,但我有远程依赖项。我想伪造来自远程服务器的文件请求。例如,当浏览器请求时,将返回fooCDN.com/bloatedLib.js
的内容。/Users/name/Desktop/bloatedLib.js
我使用 Mac,在系统或浏览器级别运行的解决方案就可以了。如果在浏览器级别运行,只有 Firefox 或 Chrome 解决方案才行。我不能使用 Windows 电脑。
答案1
我破解了这个小型代理服务器,只下载丢失的文件。只需设置你的 /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
听起来你正在运行本地网络服务器。太好了。
在你的 Mac 文件系统中,有一个名为 的文件/etc/hosts
。你可以在 中添加以下行,将所有请求重定向fooCDN.com
到本地计算机/etc/hosts
:
127.0.0.1 foocdn.com www.foocdn.com
您需要 root(超级用户)权限才能编辑/etc/hosts
。
上面这行的意思是fooCDN.com
将从您自己的计算机加载,其中有一个 Web 服务器正在监听。
但是,您没有指定本地运行的 Web 服务器。按照 Web 服务器的文档,您应该创建一个虚拟主机,将 的文档根目录fooCDN.com
指向/Users/name/Desktop/
。
这是一个示例配置(我自己还没有测试过),你可以尝试使用阿帕奇:
<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 服务器服务或重新加载新的配置文件。
答案3
你可以使用代理服务器支持软件URL 重写完成任务。许多代理服务器应用程序支持 URL 重写。例如,Charles Web 调试代理应用程序适用于 Windows、Mac OS 和 Linux支持 URL 重写。您可以在 Mac 系统上安装它,然后配置系统上的浏览器以使用代理服务器。
或者,阿帕奇是免费且开源的,mod_proxy和mod_rewrite模块。
代理服务器是免费的,并且可以在 Mac OS X 系统上运行。
如果您需要从浏览器缓存中提取项目,以便通过代理服务器使用它们,则可以使用以下技术查看 Chrome 缓存(简单方法)。例如,在 Google Chrome 中,您可以chrome:\\cache
在浏览器的地址栏中输入,然后在 Chrome 缓存中找到相关项目并将其复制到其他地方。
答案4
听起来不错韋夫应该能满足您的需求。这是一个代理服务器,您可以在其中选择资源以供离线使用。