Fiddler无法拦截PowerShell的Web请求。

15

我想使用 Fiddler 帮助某人解决关于 Invoke-RestMethod 调用 ASP.NET WebAPI 的问题。但是,当我在 PowerShell 中调用 Invoke-RestMethod 时,Fiddler 没有拦截 HTTP 通信。

当我使用 Internet Explorer 浏览与同一应用程序相关的 ASP.NET 网站的根目录时,Fiddler 如预期地拦截流量。

是否有人能够解释为什么 Fiddler 不能通过 PowerShell 捕获 HTTP 流量,并说明如何解决这个问题?


我很惊讶你没有使用消息分析器 :) - mjolinor
4个回答

18
Fiddler实际上是通过代理工作的,并在运行时自动设置IE中的代理设置。您可以通过启动Fiddler,然后在Internet选项>连接下检查“Lan设置”来进行检查。
Invoke-RestMethod具有一个-Proxy参数,您可以使用它来指向Fiddler的代理。我认为默认值是127.0.0.1:8888 :
"Invoke-RestMethod -Proxy 'http://127.0.0.1:8888' ...."
编辑: 添加截图以确认上面的答案。 Fiddler Options

2
嗯,虽然你的答案是准确的,但似乎它没有捕获我指定“-Proxy”参数的情况。你能成功测试吗? - user189198
4
是的,这个命令可以工作:Invoke-RestMethod -Uri 'http://blogs.msdn.com/powershell/rss.aspx' -Proxy 'http://127.0.0.1:8888' - JNK
2
编辑过了,看起来代理的格式很重要! - JNK
不要使用“localhost”或“127.0.0.1”,而是使用实际的本地IP地址,例如“192.168.1.25”。 - Peter Hahndorf
这不会干扰PowerShell请求。我想捕获Docker Pull的URL,但是用Fiddler无法做到。还有其他方法吗? - It's a trap
显示剩余11条评论

1

我安装NPM包时遇到了类似的问题(使用Powershell和Fiddler2)。

设置Fiddler为反向代理后,使用这里提到的命令解决了问题(感谢JNK)。

以下是逐步说明:

  1. 按照此处的步骤编写一行FiddlerScript规则以使用Fiddler作为反向代理。

在我的情况下,它是:

if (oSession.host.toLowerCase() == "127.0.0.1:8888") oSession.host = "127.0.0.1:80";

enter image description here

  1. 在 PowerShell 中使用配置的代理设置:

PS F:> npm install yo -g -proxy 'http://127.0.0.1:8888'

  1. 现在 PowerShell 的流量应该通过 Fiddler。

0
我在PowerShell v5中尝试了所有发布的解决方案,但都没有起作用。
唯一的解决方案是使用PowerShell Core v7.x(尝试了v7.4),它可以正常工作,并且Fiddler可以拦截PowerShell的Web请求。
此外,在PowerShell v5中使用curl.exe并启用代理选项也可以正常工作。
curl.exe ...  -x 127.0.0.1:8888 

0

我通过重置Fiddler的https证书(请参见答案)使其正常运作。

我在测试一个项目时遇到了相同的问题,结果发现是运行Fiddler导致了这个错误..!!

如果您正在使用Fiddler拦截http请求,请将其关闭...

这是许多导致此类错误的原因之一。

要修复Fiddler,您可能需要重置Fiddler Https证书


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接