我的任务是将某个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
生成的原始请求?
2条答案
按热度按时间blpfk2vs1#
尝试一个在线服务,如https://requestcatcher.com,并向它发出与内部服务相同的请求(显然是编辑任何敏感内容)。像这样的站点将以纯文本显示它收到的请求。
ocebsuys2#
nimrod's helpful answer展示了一种通过在线测试服务在目的地检查Web请求的方法。
至于检查由
Invoke-WebRequest
* 在源 * 创建的请求:虽然我不知道直接这样做的方法,但您可以通过以下简单的
GET
请求https://example.org
的示例来深入了解请求的形成过程中的属性:-Debug
添加到您的Invoke-WebRequest
呼叫:[S] Suspend
>
字符所示。显示在提示字符串的末尾(例如,PS C:\temp>>
.在那里执行以下操作并检查输出:exit
并提交A以继续并提交请求,或提交H以中止执行。$CurrentlyExecutingCommand
是一个(目前未记录的)自动变量-仅在为 *binary cmdlet * 调用的调试会话中可用-表示实现所调用cmdlet的.NET类的示例,在Invoke-WebRequest
的情况下为Microsoft.PowerShell.Commands.InvokeWebRequestCommand
。在调试提示符中,您可以自由地检查这个示例的属性,比如
$CurrentlyExecutingCommand.WebSession
注意事项: