如何在Powershell中使用Invoke-WebRequest重新创建一个有效的CURL命令

时间:2014-05-08 21:16:24

标签: powershell curl

此curl命令按预期工作:

curl -H "X-Api-Key:j65k423lj4k2l3fds" `
     -X PUT `
     -d "alerts_enabled=true" `
        https://some/working/file.xml

如何使用Invoke-WebRequest在PS中本机重新创建此内容?我试过了

Invoke-WebRequest -Headers @{"X-Api-Key" = "j65k423lj4k2l3fds"} `
                  -Method PUT `
                  -Body "alerts_enabled=true" `
                  -Uri https://some/working/file.xml

我也尝试为所有参数创建对象(例如$headers = @{"X-Api-Key" = "Key:j65k423lj4k2l3fds"}并传递-Headers $headers)。

由于

3 个答案:

答案 0 :(得分:16)

尝试添加参数-ContentType,例如:

Invoke-WebRequest -Headers @{"X-Api-Key" = "j65k423lj4k2l3fds"} -Method PUT `
                  -Body "alerts_enabled=true" -Uri https://some/working/file.xml `
                  -ContentType application/x-www-form-urlencoded

这导致一个看起来像这样的请求(来自Fiddler):

PUT http://some/working/file.xml HTTP/1.1
X-Api-Key: j65k423lj4k2l3fds
User-Agent: Mozilla/5.0 (Windows NT; Windows NT 6.2; en-US) WindowsPowerShell/5.0.9701.0
Content-Type: application/x-www-form-urlencoded
Host: some
Content-Length: 19
Expect: 100-continue

alerts_enabled=true

为了进行测试,我将URL从https更改为http。如果这不起作用,请下载Fiddler并在使用curl查看RAW请求时查看不同的内容。

答案 1 :(得分:7)

使用invoke-webrequest让它本地工作。 powershell guru在这里工作帮助了我。切换到New Relic API版本2(可在https://rpm.newrelic.com/api/explore获得),它使用JSON而不是xml,并进行了一些sytax调整。

$json = @"{"alert_policy":[{"enabled":"true"}]"@

$headers = @{}
$headers["X-Api-Key"] = "j65k423lj4k2l3fds"

Invoke-WebRequest -Uri "https://some/working/file.json" -Body $json -ContentType "application/json" -Headers $headers -Method Post

答案 2 :(得分:0)

这对我有用in Powershell using the curl alias to Invoke-WebRequest ...

Intent callIntent = new Intent(Intent.ACTION_CALL);
callIntent.setData(Uri.parse("0377778888"));