当目标是本地主机时,powershell Invoke-RestMethod/Invoke-WebRequest 是否会忽略代理参数?

当目标是本地主机时,powershell Invoke-RestMethod/Invoke-WebRequest 是否会忽略代理参数?

看起来 powershell (7.2.0, Windows 10.0.19043) 的 Invoke-RestMethod/Invoke-WebRequest 在目标是 localhost 时会忽略代理参数。curl 不会。我试图通过 Burp 套件传递请求,但如果我瞄准的服务器在 localhost 上,则不会拦截任何内容(但使用 curl 可以)。

该请求不仅没有被拦截,而且显然 powershell 也没有进行错误检查:

“invoke-webrequest-proxy 哈哈错误”

.. 如果我的目标服务器不是我自己的机器,就会出现错误,但如果是本地主机,则不会出现错误。

我查看了我的机器的代理设置,无论我做什么(取消选择“自动检测设置”,尝试“手动代理设置”等),都没有任何区别,并且“不要对本地地址使用代理”没有被选择过,也从未被选择过。

最后,我在两台不同的 Windows 机器上看到了相同的行为(powershell 和 curl)。

有人能解释为什么会这样以及如何改变它,以便当目标是本地主机时,来自 powershell 的请求也使用代理吗?

谢谢

答案1

在一篇旧的 Fiddler 文章中可以找到解释:
问题:发送到 http://localhost 或 http://127.0.0.1 的流量未被捕获

Internet Explorer 和 .NET Framework 被硬编码为不通过任何代理发送对 Localhost 的请求,并且作为代理,Fiddler 不会接收此类流量。

最简单的解决方法是使用您的计算机名称作为主机名,而不是 Localhost 或 127.0.0.1。例如,不要访问 http://localhost:8081/mytestpage.aspx,而是访问 http://machinename:8081/mytestpage.aspx。

您可以尝试的另一种解决方法是,不使用localhost而使用:localhost.在末尾添加一个点。

相关内容