web-dev-qa-db-fra.com

comment recréer une commande CURL fonctionnelle avec Invoke-WebRequest dans Powershell

Cette commande curl fonctionne comme vous le souhaitez:

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

Comment puis-je recréer cela nativement dans PS avec Invoke-WebRequest? J'ai essayé

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

J'ai également essayé de créer des objets pour tous les paramètres (par exemple, $headers = @{"X-Api-Key" = "Key:j65k423lj4k2l3fds"} et transmettre -Headers $headers).

Merci

8
user3561945

l'a fait fonctionner de manière native en utilisant invoke-webrequest. Un gourou powershell ici au travail m'a aidé. Basculé vers la nouvelle version 2 de l'API Relic (disponible sur https://rpm.newrelic.com/api/explore ), qui utilise JSON au lieu de xml, et a effectué quelques modifications 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
7
user3561945

Essayez d’ajouter le paramètre -ContentType, par exemple:

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

Cela se traduit par une demande qui ressemble à ceci (de 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

Pour les tests, j'ai changé l'URL de https à http. Si cela ne fonctionne pas, téléchargez Fiddler et examinez la demande RAW lorsque curl est utilisé pour voir ce qui est différent.

16
Keith Hill

Cela fonctionne pour moi dans Powershell en utilisant l'alias curl à Invoke-WebRequest ...

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