programing

Invoke-WebRequest : '헤더' 매개 변수를 바인딩할 수 없습니다.

batch 2023. 7. 30. 17:32
반응형

Invoke-WebRequest : '헤더' 매개 변수를 바인딩할 수 없습니다.

powershell에서 curl 명령을 실행하려고 합니다.

curl --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/

그런데 이런 오류가 발생하는데, 무엇이 문제인가요?

Invoke-WebRequest : '헤더' 매개 변수를 바인딩할 수 없습니다.변환할 수 없습니다.시스템 유형의 "content-type: application/json;" 값입니다.문자열"을 입력합니다."시스템.컬렉션.사전".
라인:1 문자:158... 5, "생일 축하합니다!"] }' -H '콘텐츠 유형: application/json;' http://...
+                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~카테고리정보: 잘못된 인수: (:) [Invoke-WebRequest], 매개 변수 바인딩 예외FullyQualifiedErrorId: 인수 메시지 없음을 변환할 수 없습니다. Microsoft.PowerShell.명령.웹 요청 명령 호출

이미 일부 논평가들에 의해 언급된 바와 같이, 당신은 그것을 볼 것입니다.curl에 대한 별칭일 뿐입니다.

PS> Get-Command curl

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

참고: 사용하는 명령이 별칭, cmdlet 또는 실행 파일인지 모를 수 있기 때문에 사용하는 것이 좋습니다.

이 시점부터 문제를 해결할 수 있는 두 가지 방법이 있습니다.

  1. PowerShell을 사용합니다(또는 PowerShell < 3, 을 사용하는 경우).

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

    JSON은 IRM의 기본 contentType이므로 content-type이 필요하지 않습니다. 그러나 다음을 사용하여 변경할 수 있습니다.-ContentType.

  2. 현재 환경에서 사용 가능한 경우 원본을 사용합니다. 다음과 같이 입력해야 합니다.

    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/
    

PowerShell은 기본적으로 JSON 응답을 지원하기 때문에 두 번째 응답보다 첫 번째 응답을 선호합니다. 예를 들어, Piping을 통해 쉽게 사용할 수 있습니다.Where-Object,Format-Table,Select-Object,Measure-Object그리고 훨씬 더 확실합니다.cUrl을 사용하려면 다음에서 반환하는 String을 구문 분석해야 합니다.curl.exe프로세스를 직접 수행합니다.이는 이진 콘텐츠에서도 문제가 될 수 있습니다.

Curl은 기본적으로 PowerShell에서 Invoke-Web 요청을 사용합니다.

오류에서 볼 수 있듯이 헤더는 기본적으로 "System" 형식을 사용합니다.컬렉션.ID 사전 n은 "시스템"을 통과하고 있습니다.문자열".

헤더를 사전/해시 테이블로 변환하면 문제가 해결됩니다.

curl --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/

이것을 발견하기 전까지 비슷한 문제가 있었습니다. https://github.com/MicrosoftDocs/azure-docs/issues/31851

"명령은 특정 VM 및 Bash 환경에서 실행되도록 설계되었습니다.PowerShell에 없습니다.따라서 대부분의 경우 보이는 오류가 예상됩니다."

언급URL : https://stackoverflow.com/questions/45183355/invoke-webrequest-cannot-bind-parameter-headers

반응형