问题标签 [invoke-restmethod]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
324 浏览

java - 从 PowerShell 发出 POST 请求,来自 Powershell 但不是 Postman 的 JSON 解析错误

我正在尝试通过 PowerShell 向本地 java spring 应用程序发出 POST 请求。

我从文件加载请求,将其转换为 json,然后尝试 Invoke-RestMethod。

运行此之后,我得到一个 IOException,然后是“连接被远程主机强制关闭”。它说没有构造函数或objectfactory可以从字符串中序列化java对象......

当我 echo $body 它看起来不错(尽管请求很大),但更重要的是,如果我只是 ctrl+a ctrl+c 文本文件并将其粘贴到邮递员中并运行它,则服务成功。

只是为了确保我从邮递员那里复制了请求并将其放回文件中,将文件重新加载到变量中并将其转换为 json 并再次尝试;同样的问题。

即使删除了可为空的字段,请求也很庞大,但是从我在 powershell 中通过回显请求可以看到的内容看起来很好......

是否有关于在 powershell 中读取文件可能会向变量添加隐藏字符的内容,和/或通过 powershell 发送大量请求是否存在问题?

更新:如果我删除大部分请求,留下一个有效的 json 实体,但一个与架构不匹配的实体,我会收到 400 错误(错误请求)。

更新 2:我发现了如何在应用程序尝试处理它时获取 json 消息(我认为将字符串转换为 json 的过程可能是问题)。我复制了应用程序声称有问题的 json,并将其与包含实际 json 的文件进行了比较——它们是相同的。

0 投票
0 回答
208 浏览

powershell - 使用 Microsoft/Google OAuth 到站点的 tokenInvoke-WebRequest

我需要通过 Powershell访问这个主站点https://www.truecaller.com/search/eg/xxxx 。

我使用表单身份验证为 Invoke-WebRequest 编写了许多 PowerShell 脚本,但这次网站使用来自 Google 或 Microsoft 的外部身份验证。

从谷歌搜索中,我注意到我必须先获取访问授权码。

该站点从google API配置为Web应用程序而不是桌面应用程序的问题,因此拒绝在网页上给我授权码。

我不拥有该网站,因此我无法从网站或身份验证方面进行任何更改。

通常,当我在浏览器上打开主站点并选择从 Google 进行身份验证时,它会将我重定向到

然后在身份验证后,它将我重定向回主站点

我正在使用下面的代码来捕获授权代码,以便稍后在另一个命令中使用以获取访问令牌,然后调用 webrequest 到主站点。

当我使用$redirect_uri1

谷歌在网上询问我是否允许应用程序访问我的帐户后,它会正常访问网站并且没有给我授权码,因为重定向 URL 是 https://www.truecaller.com/auth/google/callback

当我使用$redirect_uri2

Google 拒绝完成身份验证过程,因为我使用 URL 重定向桌面 URL,并且此 clientID 配置为使用 Web 重定向,我面临以下错误。 在此处输入图像描述

我的问题是,我如何在这个通过 OAuth 使用外部身份验证的主网站上使用 Invoke-WebRequest 或 Invoke-RestMethod,这是双重的吗?

0 投票
0 回答
132 浏览

powershell - 在 Powershell 中使用 Invoke-RestMethod 进行复杂查询

我正在尝试使用 GET 请求在 Powershell 中调用 API。我熟悉通过在“Body”参数中发送 Powershell 哈希表来过滤响应为“

但是哈希表只允许我使用等号运算符进行过滤。因为哈希表看起来有点像

我需要使用“等于”以外的比较,更重要的是“-ne”和“-like”等。在我从 Invoke-RestMethod 获得响应后,我可以过滤它们,但是响应会非常大,以至于请求本身会超时。API 只是客户端和数据库之间的中间件,除了查找与正文中的字段值匹配的行外,什么也不做。那么,有什么方法可以让我在 Web 请求的同时进行复杂的过滤器?提前致谢。

0 投票
1 回答
293 浏览

powershell - 使用 PowerShell Invoke-RestMethod 发布多部分正文

使用 Postman,API 调用有效。我使用他们的代码片段功能来获得 PowerShell 等效项。但是当我在 PowerShell ISE 上尝试时,我得到“不允许空请求正文”。为什么它认为身体是空的?如何确认/查看 $body 的内容?

当我查看内容时,$body这就是我得到的。如何查看每个内容中的数据?

添加-VerboseInvoke-RestMethod我看到

我找不到“-1 字节有效负载”的含义。有人知道吗?

0 投票
2 回答
215 浏览

flask - 来自远程计算机的 Invoke-RestMethod PUT 导致 Flask api 出现错误 500

我最近使用带有 wfastcgi 的 Windows Server 2019 上的 IIS 部署了我的第一个 Flask 应用程序。

我可以在 http:myServerIP:88/ 上看到该网站,登录后一切正常。从远程系统访问一些 GET 路由时,我还能够看到一些 JSON 数据输出。

但是,每当我尝试Invoke-RestMethod从远程计算机运行时,它会收集一些信息并调用我的网站路由的 URL 以将信息更新到服务器上的 MongoDB,它会显示错误 500:

Invoke-RestMethod : 500 Internal Server Error Internal Server Error
服务器遇到内部错误,无法完成您的请求。服务器过载或应用程序出错。
在 C:\Users\wk14\Desktop\update2DB.ps1:401 char:8

  • $res = Invoke-RestMethod -Method 'Put' -Uri $url -Body (ConvertTo-Jso ...
    • CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-RestMethod], WebException
    • FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeRestMethodCommand

我已经通过将我的应用程序的 PUT 路由托管在 Flask 的开发服务器上来测试它,并让远程计算机将其 JSON 数据保存到一个文本文件中,然后Invoke-RestMethod在我的主机上调用它,它能够将数据更新到 MongoDB没有问题。

但是在 IIS 上部署 Flask 应用程序后,PUT 路由刚刚停止工作,并在远程系统上出现错误 500。
我尝试在 IIS 管理器中四处查看,但仍然无法弄清楚问题所在。

有人可以给我一些指导吗?谢谢!!

0 投票
3 回答
2674 浏览

powershell - 使用 -ContentType 'application/json' 调用 WebRequest -Method 'POST' 失败

使用时:

或者

ContentType 'application/json' 和 $Headers = @{'Content-Type' = 'application/json' } -Headers $Headers 都
不起作用

错误总是:

相同的调用在 Postman 中有效

我使用的是 PS 5.1,我必须有 -ContentType 'application/json' 否则 PS 工作但服务失败

可能是什么问题?

0 投票
0 回答
73 浏览

powershell - 尝试通过 Powershell 连接到 E*Trade

我正在尝试连接到 E*Trade API - https://developer.etrade.com/getting-started/developer-guides

所以对于我的标题,我有

但我总是得到这个回复:

Invoke-WebRequest :指定的值包含无效的 HTTP 标头字符。

参数名称:名称

我已经尝试删除所有不同的标头位,但没有成功,只有当我删除 Auth 位时,它才会给我一个不同的信息,所以这让我想知道它是否不能处理 ':' 字符?

真的不确定

0 投票
2 回答
1460 浏览

powershell - Powershell - 具有多个标头的 Invoke-RestMethod

我正在尝试在 Powershell 中使用 Invoke-Restmethod 来调用 API(我对此很陌生)。我可以将其发送到 POST 并返回 jwt 访问令牌。我也可以使用该令牌通过 GET 返回一个 id,但是我在下一步返回下一组数据时遇到了麻烦。我可以通过 curl 让它手动工作。我相信这个问题可能是因为返回租户列表需要多个标题,而我不确定格式才能使其正常工作。

curl 脚本如下所示,并按预期工作:

我在powershell中尝试了多种方法来做到这一点,最近一次如下,但我没有尝试任何工作。我已经尝试返回单独的 $headers 内容并构建一个字符串(即 $headers2 = $.headers.Item(Authorization) + ......),但这也不起作用。老实说,我尝试了很多不同的东西,我忘记了我拥有和没有尝试过的东西

请让我知道添加多个标题的正确方法(我认为这是问题所在,我做错了什么)?

0 投票
0 回答
58 浏览

json - 通过 foreach 在 Powershell 中引用 JSON 中的数据

我正在使用 Invoke-RestMethod 访问一些 JSON 数据,我想遍历它,为每个 id 执行另一个 Invoke-RestMethod 并为每个调用使用 apiHost 值。数据的简化示例如下:

这是迄今为止我拥有的功能。Write-Host 行(用于解决此问题)显示每个 id 的所有 apiHost 值,并解释下一行不起作用的原因。如何通过 id 每次迭代引用相关的 apiHost 以便下一行可以工作?

这篇文章似乎表明我正在做的事情是正确的,但我认为我遗漏了一些明显的东西。

0 投票
0 回答
97 浏览

powershell - 仅在 Powershell 脚本中的第一次 API 调用时需要 -Credentials 标志

免责声明:我是一个 Powershell 菜鸟,所以请原谅任何缺乏清晰度或糟糕的脚本实践

TL;博士

有没有一种方法可以运行Invoke-RestMethod -Uri $uri -Authentication Basic -Credentials $cred一次,而不必在后续命令中使用-Credentialsor-Authentication标志Invoke-RestMethod来访问同一个 API?

目标

我试图弄清楚如何减少在 Powershell 中运行的每个脚本的登录次数。API 似乎不喜欢我登录这么多来执行 GET HTTP 请求,因为它通知我我的帐户上的密码已过期,尽管密码过期未应用。如果修复也加快了脚本的速度,那是一个好处,但我想这更多地取决于 API 响应时间。

关于平台

由于隐私问题,我不想透露太多关于平台的信息,除非我必须这样做,但这里是基本结构:

每个客户/企业都被视为一个“企业”,每个企业至少有 1 个“站点”。大多数企业只有 1 个站点,每个站点有 6 到 200 个用户,但有些企业最多有 7 个站点。这意味着一些企业拥有接近600个用户。

不幸的是,该平台没有关于我正在使用的 API 的任何文档(我已经请求他们支持但没有运气)。如果没有一些屏幕抓取工具,我们也无法通过门户网站 GUI 导出我们需要的信息。我们更喜欢使用平台 API 的脚本方法,因此我负责编写该脚本。

由于缺乏来自平台支持的帮助和很少的文档,我正在通过在测试站点上登录我们的管理门户、更改设置并检查 .har 文件以查看 GET 请求的 URL 来确定所有正确的 URL为了得到我需要的信息。这很乏味,但从长远来看,它可以为我们节省平台迁移的时间。

此外,我发现该平台使用 REST API 和基本身份验证。

关于剧本

我正在循环使用Invoke-RestMethod -Uri $uri -Authentication Basic -Credentials $credforeach获取信息,然后将其保存到自定义对象中以进行导出。由于当前平台的结构方式,我必须为每个用户执行 5 个 HTTP GET 请求来获取我们需要的信息,每个用户大约需要 4 秒。

使用网络浏览器时,我只需要登录一次,它就会记住我的凭据,那么为什么不一样Invoke-RestMethod呢?我四处寻找,找不到任何有用的东西。

如果有办法使每个后续Invoke-RestMethod命令都不需要-Credentials标志来减少每个脚本运行的登录次数,那将是理想的。如果它恰好也加快了脚本的速度,那就更好了。