如何在PowerShell中访问Invoke-WebRequest生成的原始请求?

siotufzp  于 2023-06-23  发布在  Shell
关注(0)|答案(2)|浏览(136)

我的任务是将某个Powershell脚本写入Go。我不认为我可以自由地分享这个脚本需要做的许多细节,除了这个:脚本使用Invoke-WebRequest调用API。该请求是一个GET请求,带有JWT进行授权。
此请求在PowerShell中成功,但在Go中由于一些防火墙问题而失败。出于某种原因,从Go发送请求时会被阻止,但从PowerShell发送时没有问题。有一个代理,该代理内置在Go http客户端中。我以前已经能够在Go中构建并成功地使用这个代理的客户机在这种环境中。PowerShell请求不涉及向代理传递凭据。
我的希望是,通过检查Go语言构造的请求,并将其与Invoke-WebRequest生成的请求进行比较,我可以确定Go语言请求中缺少了什么,并相应地进行更正。目前,我可以使用httputil.DumpRequestOut()查看Go语言中的原始请求,但我无法找到如何在PowerShell中捕获Invoke-WebRequest创建和发送的原始请求。至少,我找不到一种方法来满足我的情况的限制。
我看到过涉及使用Fiddler、netsh和wireshark的解决方案,但不幸的是,在我的环境中,我无法访问这些工具。这些都需要我不拥有的、也不会被授予的崇高权利。我试图回顾Invoke-WebRequest本身的source code,但也没有找到任何帮助。我遇到了一个Fiddler repo的链接,这是令人鼓舞的,但是带有链接的帖子已经有七年的历史了,repo已经不存在了。
除非我弄错了,否则请求必须在发送之前在本地构造,因此必须有某种方式可以在本地访问请求。如何访问Invoke-WebRequest生成的原始请求?

blpfk2vs

blpfk2vs1#

尝试一个在线服务,如https://requestcatcher.com,并向它发出与内部服务相同的请求(显然是编辑任何敏感内容)。像这样的站点将以纯文本显示它收到的请求。

ocebsuys

ocebsuys2#

nimrod's helpful answer展示了一种通过在线测试服务在目的地检查Web请求的方法。
至于检查由Invoke-WebRequest * 在源 * 创建的请求:
虽然我不知道直接这样做的方法,但您可以通过以下简单的GET请求https://example.org的示例来深入了解请求的形成过程中的属性:

  • -Debug添加到您的Invoke-WebRequest呼叫:
Invoke-WebRequest https://example.org -Debug
  • 您将收到确认提示:
  • 提交S以选择[S] Suspend
  • 您将输入一个嵌套的调试提示符,如 two>字符所示。显示在提示字符串的末尾(例如,PS C:\temp>>.在那里执行以下操作并检查输出:
$CurrentlyExecutingCommand
  • 下面是更多提示。
  • 调试完成后,提交exit并提交A以继续并提交请求,或提交H以中止执行。

$CurrentlyExecutingCommand是一个(目前未记录的)自动变量-仅在为 *binary cmdlet * 调用的调试会话中可用-表示实现所调用cmdlet的.NET类的示例,在Invoke-WebRequest的情况下为Microsoft.PowerShell.Commands.InvokeWebRequestCommand
在调试提示符中,您可以自由地检查这个示例的属性,比如$CurrentlyExecutingCommand.WebSession
注意事项:

  • 这可能无法为您提供所需的所有信息,因为此时/通过公共属性提供的信息可能无法代表最终提交的请求中包含的内容的全貌。

相关问题