除此之外,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尝试部分中提到的错误的指示将非常感激。
感谢。
答案 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。