在 Linux 上我启动了 chrome,google-chrome --proxy-server=127.0.0.1:8888 --proxy-bypass-list=""
但是它仍然没有使用代理来处理本地主机请求。
我如何强制 Chrome 使用我的本地主机代理?
你可能想知道我为什么要这样做,我正尝试使用 jmeter 记录对在本地环境中运行的应用程序的所有请求。
答案1
你几乎已经知道了,但答案位于 Chromium 文档中,用于绕过选项你正在使用。你需要减去通过在要删除的内容前面添加破折号来删除默认值,在本例中是环回接口,字面意思是<loopback>
。
常规绕过规则会指示浏览器不应使用代理的 URL,而此规则则具有相反的效果,并告诉浏览器改用代理。
完整参数是--proxy-bypass-list="<-loopback>"
有点遗憾的是,这一点没有被提及或链接起来Chromium 的网络设置页面...
答案2
最后我找到了一个巧妙的解决方案。从一开始就很清楚这是一个浏览器问题,因为我能够使用 发出请求curl --proxy
。
诀窍在于 DNS 解析也通过代理进行,因此在远程机器上进行。因此只需在远程文件中添加一个新条目/etc/hosts
:
127.0.0.1 local
然后,您可以在本地计算机上访问远程“localhost”,因为 Chrome 对这个新主机名一无所知。例如:http://local:8080/mysite
。
答案3
对于 Windows10,这是一个系统问题,本地主机将始终转到当前 PC,并且不会通过代理。
您可以在操作系统的代理设置中设置此项,以强制本地主机使用代理。
- 打开操作系统的代理设置
- 确保您的代理服务器(主机和端口)已设置。
- 下面,将有一个输入供您输入,说
Use the proxy server except for address that start with the following entries. Use semicolons(;) to separate entries
- 添加
<-loopback>
到该输入中。 - 节省。
然后您对本地主机的请求将通过代理进行。
笔记:
- 虽然浏览器默认会绕过 localhost,但即使没有此设置,CMD 也能工作。
curl -x http://{proxyserIp}:{proxyPort} http://localhost:3000
- 如果您使用某些浏览器扩展(如
SwitchyOmega
),您也可以添加<-loopback
到其中Bypass list
,它仍然有效。
参考: https://docs.microsoft.com/en-us/archive/blogs/fiddler/fiddler-and-the-ie9-release-candidate https://stackoverflow.com/questions/37700079/how-to-intercept-local-server-web-requests-using-burp-in-internet-explorer
答案4
如果您使用 mitmproxy 或 charles 来调试本地主机请求,请尝试在 macos 中使用设置了系统代理的 Chrome 69。