【问题标题】:Making POST Request from PowerShell, JSON Parse Error From Powershell but Not Postman从 PowerShell 发出 POST 请求,来自 Powershell 但不是 Postman 的 JSON 解析错误
【发布时间】:2021-04-11 14:53:29
【问题描述】:

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

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

$filePath = some/file/path.json
$string = [System.IO.File]::ReadAllText($filePath)
$body = $string | ConvertTo-Json
$cred = Get-Credential
$uri = "some:url/restUri"

$response = Invoke-RestMethod -Method 'Post' -Uri $uri -Credential $cred -Body $body -ContentType "application/json"

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

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

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

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

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

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

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

【问题讨论】:

    标签: java json spring powershell invoke-restmethod


    【解决方案1】:

    想通了: 显然 ConvertTo-Json 步骤是问题所在。我不确定为什么会导致问题,但是当我发送 $content (文件的内容,直接复制为文本)时,调用有效,但是如果我设置 $body = $content | ConvertTo-Json并发送$body,请求失败。

    编辑:显然不能将此标记为 2 天的答案。

    【讨论】:

      猜你喜欢
      • 2018-01-05
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      • 2017-01-18
      • 2015-11-29
      相关资源
      最近更新 更多