2014-05-08 14 views
6

này Curl tác lệnh như mong muốn:làm thế nào để tái tạo một lệnh CURL làm việc với Invoke-WebRequest trong Powershell

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

Làm thế nào tôi có thể tái tạo này tự nhiên trong PS wth Invoke-WebRequest. Tôi đã thử

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

Tôi cũng đã cố gắng làm cho các đối tượng cho tất cả các params (ví dụ $ headers = @ { "X-Api-Key" = "Key: j65k423lj4k2l3fds"} và đi qua -Headers $ header) .

Cảm ơn

+1

nên không tiêu đề đó được '@ { "X-Api-Key"= "j65k423lj4k2l3fds"}'? –

+0

vâng, đó chỉ là lỗi đánh máy khi tôi đang tạo lại khóa API thực sự của mình. đã sửa. – user3561945

Trả lời

6

làm cho nó hoạt động nguyên bản bằng cách sử dụng lời gọi-webrequest. nữ tu quyền lực ở đây tại nơi làm việc đã giúp tôi. Đã chuyển sang API Relic mới phiên bản 2 (có sẵn tại https://rpm.newrelic.com/api/explore), sử dụng JSON thay vì xml và thực hiện một số chỉnh sửa 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 
+1

mặc dù mã ở trên đã tạo ra 200 và một số json phản hồi, nó không chuyển đổi cài đặt trong New Relic. Tôi đã POST thay vì PUTing ... vì vậy hãy chú ý đến điều đó. – user3561945

14

Hãy thử thêm các tham số -ContentType ví dụ:

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 

Điều đó dẫn tới một yêu cầu trông như thế này (từ 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 

Để thử nghiệm, tôi đã thay đổi URL từ https đến http. Nếu điều đó không hiệu quả, hãy tải xuống Fiddler và kiểm tra yêu cầu RAW khi curl được sử dụng để xem có gì khác biệt.

Các vấn đề liên quan