使用cURL与Powershell 2.0发出POST请求

时间:2014-07-23 15:09:38

标签: rest powershell curl

方案

除此之外,Powershell 2.0还没有有用的cmdlet Invoke-RestMethod。

我无法升级到版本3,而且我发现的大多数示例都使用版本3.

我找到了this article,但这似乎对我的简单场景来说太复杂了。

我需要编写一个Powershell脚本,以Json格式POST数据,例如

{"Id":5,"Email":"test@com","DataFields":null,"Status":0}

我尝试了什么

我能够获取数据。这是我尝试过的脚本之一。

curl -v --user username:password https://api.dotmailer.com/v2/account-info

但是,当我尝试POST时,我无法弄清楚将消息正文放在脚本中的位置。这是我到目前为止所得到的:

curl -v -X POST -H "Accept: application/json" -H "Content-Type: application/json" -u username:password -d '{"Id":5,"Email":"test@com","OptInType":0,"EmailType":0, "DataFields":null,"Status":0}' https://api.dotmailer.com/v2/contacts

返回以下错误:

{"message":"Could not parse the body of the request based on the content type \"application/json\" ERROR_BODY_DOES_NOT_MATCH_CONTENT_TYPE"}*

问题

有人可以建议如何使用cURL从Powershell发布Json数据吗?

任何有关我为什么会收到我在Waht I尝试部分中提到的错误的指示将非常感激。

感谢。

2 个答案:

答案 0 :(得分:1)

从curl' man page看来,您需要使用-d开关:

curl -v --user username:password -H "Content-Type: application/json" -d '{"Id":5,"Email":"test@com","DataFields":null,"Status":0}' https://api.dotmailer.com/v2/contacts

答案 1 :(得分:0)

请注意,问题是关于curl.exe 外部程序 ,而不是关于PowerShell的Invoke-WebRequest cmdlet(不幸的是,它是在更高的PowerShell版本中别名为curl ,除非明确指定了.exe扩展名(curl.exe ...),否则将抢占对外部程序的调用。

不幸的是,您必须\-转义嵌入的"实例,并将其作为参数传递给外部程序

因此,即使:

'{"Id":5,"Email":"test@com","DataFields":null,"Status":0}'
由于long-standing bug

应该有效,但是无效。相反,您必须使用:

'{\"Id\":5,\"Email\":\"test@com\",\"DataFields\":null,\"Status\":0}'

有关更多信息,请参见this answer