从PowerShell发出POST请求,来自PowerShell但不是Postman的JSON分析错误



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

我从一个文件加载请求,将其转换为json,然后尝试调用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,后面跟着一个"远程主机强制关闭的连接"。它说没有一个构造函数或对象工厂可以将java对象序列化为字符串。。。

当我回显$body时,它看起来很好(尽管请求量很大(,但关键是,如果我只是ctrl+Actrl+c文本文件,并将其粘贴到poster中并运行它,则服务是成功的。

为了确保我复制了poster的请求并将其放回文件中,将文件重新加载到变量中并将其转换为json,然后重试;同样的问题。

即使在删除了可为null的字段后,请求也是巨大的,但从我在powershell中通过回显请求可以看到,它看起来很好。。。

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

UPDATE:如果我删除了大部分请求,留下一个有效的json实体,但它与模式不匹配,我会得到一个400错误(Bad request(。

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

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

编辑:显然在两天内无法将其标记为答案。

最新更新