как воссоздать рабочую команду CURL с помощью Invoke-WebRequest в Powershell

эта команда curl работает по желанию:

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

как я могу воссоздать Это изначально в PS с Invoke-WebRequest? Я пытался

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 ответов


попробуйте добавить параметр-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 используется, чтобы увидеть, что отличается.


получил его для работы изначально с помощью invoke-webrequest. гуру powershell здесь на работе помог мне. Переключился на новый 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

это работает для меня в Powershell с помощью curl псевдоним Invoke-WebRequest...

 curl -H @{"X-Api-Key" = "j65k423lj4k2l3fds"} -Method PUT 'https://some/working/file.xml'