2017-07-19 13 views
5

Tôi cố gắng để thực hiện một lệnh curl trong PowerShell:Invoke-WebRequest: Không thể gán tham số 'Headers'

curl --user bitcoinipvision --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "move", "params": ["acc-1", "acc-2", 6, 5, "happy b 
irthday!"] }' -H 'content-type: application/json;' http://localhost:18332/ 

Nhưng tôi nhận được lỗi này, vấn đề là gì?

Gọi-WebRequest: Không thể ràng buộc tham số 'Tiêu đề'. Không thể chuyển đổi "loại nội dung: ứng dụng/json;" giá trị của loại "System.String" thành nhập "System.Collections.IDictionary". Tại dòng: 1 char: 158 + ... 5, "happy birthday!"]} '-H' content-type: application/json; ' http: // ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: InvalidArgument: (:) [Gọi-WebRequest], ParameterBindingException + FullyQualifiedErrorId: CannotConvertArgumentNoMessage, Microsoft.PowerShell.Commands.InvokeWebRequestCommand

+5

Hãy thử 'bí danh curl', nó dường như đi đến' Gọi-WebRequest' (không phải trên PowerShell của tôi). Nếu bạn muốn 'curl' thực, sử dụng' curl.exe' một cách rõ ràng. –

+1

bạn đã đề cập đến nội dung dưới dạng ứng dụng/json trong khi bạn chuyển nó thành chuỗi. Nếu json thích hợp của nó sau đó sử dụng convertto-json để chuyển nó thành json –

+0

Lưu ý rằng các phiên bản gần đây của PowerShell có ['Invoke-RestMethod'] (https://msdn.microsoft.com/powershell/reference/5.1/microsoft.powershell .utility/invoke-restmethod) và hỗ trợ đầy đủ cho JSON ('ConvertTo-Json' và tương tự). Nó đáng đọc trên các cách PowerShell bản địa để làm điều này. –

Trả lời

0

Như đã nêu ra một số bình luận bạn sẽ thấy rằng curl thực sự chỉ là một bí danh để Invoke-WebRequest:

PS> Get-Command curl 

CommandType  Name            Version Source 
-----------  ----            ------- ------ 
Alias   curl -> Invoke-WebRequest 

Lưu ý: Tôi đề nghị sử dụng Get-Command, không phải Get-Alias b bạn có thể không biết liệu lệnh bạn đang sử dụng có phải là bí danh, lệnh ghép ngắn hay tệp thực thi hay không.

Từ điểm này có hai cách có thể để giải quyết vấn đề của bạn:

  1. Sử dụng PowerShell của Invoke-RestMethod (hoặc, nếu bạn đang sử dụng PowerShell < 3, Invoke-WebRequest):

    Invoke-RestMethod -Uri http://localhost:18332/ -Credential bitcoinipvision -body $thisCanBeAPowerShellObject 
    

    Như bạn thấy, không có kiểu nội dung là cần thiết vì JSON là kiểu nội dung mặc định của IRM; mặc dù bạn có thể thay đổi nó bằng cách sử dụng -ContentType.

  2. Nếu có trong môi trường hiện tại của bạn, hãy sử dụng cUrl gốc. Bạn phải gõ nó theo cách này:

    curl.exe --user bitcoinipvision --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "move", "params": ["acc-1", "acc-2", 6, 5, "happy birthday!"] }' -H 'content-type: application/json;' http://localhost:18332/ 
    

Tôi chắc chắn sẽ thích cái đầu tiên trong vòng một 2, như PowerShell natively hỗ trợ JSON câu trả lời, cho phép bạn dễ dàng sử dụng chúng, ví dụ bằng cách đường ống đến số Where-Object, Format-Table, Select-Object, Measure-Object và rất nhiều con vật. Nếu bạn thích sử dụng cUrl, bạn phải phân tích cú pháp chuỗi được trả về bởi quy trình curl.exe của riêng bạn. Điều này cũng có thể có vấn đề với nội dung nhị phân.

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