我正在使用本地服务器开发网站,但是我具有远程依赖性。我想伪造来自远程服务器的文件请求。例如,当浏览器请求fooCDN.com/bloatedLib.js
内容时,/Users/name/Desktop/bloatedLib.js
将返回。
我使用的是Mac,可以在系统或浏览器级别使用的解决方案很好。如果它可以在浏览器级别运行,则仅Firefox或Chrome解决方案可以。我无法使用Windows计算机。
我正在使用本地服务器开发网站,但是我具有远程依赖性。我想伪造来自远程服务器的文件请求。例如,当浏览器请求fooCDN.com/bloatedLib.js
内容时,/Users/name/Desktop/bloatedLib.js
将返回。
我使用的是Mac,可以在系统或浏览器级别使用的解决方案很好。如果它可以在浏览器级别运行,则仅Firefox或Chrome解决方案可以。我无法使用Windows计算机。
Answers:
我把这个小代理服务器砍在一起,只下载丢失的文件。只需将/ 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副本)
illegal option -- e
,您能帮上忙吗?
-c
参数来运行脚本(与-e
没有脚本的sh -c
部分相同 )
听起来您正在运行本地Web服务器。优秀。
在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/
。
这是一个示例配置(我自己尚未测试过),可以尝试与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服务器服务或重新加载新的配置文件。
fooCDN.com
没有Internet连接的情况下请求文件。
您可以使用支持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浏览器缓存中找到相关项目,然后将其复制到其他位置。