programing tip

WINDOWS RESTful 서비스의 cURL POST 명령 줄

itbloger 2020. 12. 28. 07:54
반응형

WINDOWS RESTful 서비스의 cURL POST 명령 줄


내 문제 : POST 요청과 함께 일부 데이터를 보내는 동안 명령 줄 도구를 사용하여 내 localhost 서버를 컬링하는 것이 작동하지 않습니다.

오류의 원인 인 것 같습니다. 다음과 같은 것을 상상해보십시오 .

  1. curl -i -X POST -H 'Content-Type: application/json' -d '{"data1": "data goes here", "data2": "data2 goes here"}' http:localhost/path/to/api

반환 된 데이터의 결과

curl: (6) Could not resolve host: application; No data record of requested type
curl: (6) Could not resolve host: data goes here,; No data record of requested type
curl: (6) Could not resolve host: data2; No data record of requested type
curl: (3) [globbing] unmatched close brace/bracket at pos 16

몇 가지 검색 후 나는 그 문제가 UNIX 쉘에서 작동하기 때문에 요청에 사용되는 신택스가 될 수 없다는 것을 알았습니다.

Windows를 사용하고 있습니까? 그것은 작은 따옴표와 큰 따옴표를 제대로 처리하지 못하는 완전히 깨진 껍질처럼 보입니다. 나는 방금 그 명령 줄을 시도했고 그것은 내 리눅스 박스에서 잘 작동했다. http://curl.haxx.se/mail/archive-2011-03/0066.html

나는 "이스케이프"를 해결하려고 노력했지만 여전히 작동하지 않았습니다.

2.

curl -i -X ​​POST -H 'Content-Type : application / json'-d '{\ "data1 \": \ "data goes here \", \ "data2 \": \ "data2 goes here \"}' http : // localhost / path / to / api

삼.

curl -i -X ​​POST -H 'Content-Type : application / json'-d '{\ "data1 \": \ "data goes here \", \ "data2 \": \ "data2 goes here \"}' http : // localhost / path / to / api

그래서 포기했습니다. Windows가 POST에서 보낸 JSON 개체를 엉망으로 만드는 것 같습니다.


내 win7 x64 랩톱에서 동일한 문제가 발생 했으며 매우 유사한 명령 줄 형식을 사용하여 Win64-Generic w SSL 레이블이 붙은 curl 릴리스를 사용하여 작동 할 수있었습니다 .

C:\Projects\curl-7.23.1-win64-ssl-sspi>curl -H "Content-Type: application/json" -X POST http://localhost/someapi -d "{\"Name\":\"Test Value\"}"

이스케이프 된 항목과 헤더 매개 변수 값 주위에 큰 따옴표를 사용한다는 점에서 두 번째 이스케이프 버전과 다릅니다. 확실히 리눅스 쉘 구문을 더 선호합니다.


따옴표와 싸우는 것보다 쉬운 명령 줄의 또 다른 대안은 json을 파일에 넣고 curl 매개 변수의 @ 접두사를 사용하는 것입니다. 예를 들어 json.txt에서 다음과 같이 사용합니다.

{ "syncheader" : {
    "servertimesync" : "20131126121749",
    "deviceid" : "testDevice"
  }
}

내 경우에는 다음을 발행합니다.

curl localhost:9000/sync -H "Content-type:application/json" -X POST -d @json.txt

json을 더 읽기 쉽게 유지합니다.


대체 솔루션 : 명령 줄보다 사용자 친화적 인 솔루션 :

간단한 GET 이외의 HTTP 메소드를 사용하여 데이터를 전송하고 요청하는 사용자 친화적 인 방법을 찾고 있다면 AVANCED REST CLIENT 라는 http://goo.gl/rVW22f 와 같은 크롬 확장을 찾고있을 것입니다.

명령 줄을 사용하려는 사람들에게는 cygwin을 권장합니다.

Windows에서 Linux 느낌얻을 수 있도록 CURL과 함께 cygwin을 설치했습니다 !

Cygwin 명령 줄을 사용하면이 문제가 중지되었으며 가장 중요한 것은 1.에서 사용 된 요청 구문이 잘 작동한다는 것입니다.

유용한 링크:

Windows 명령 줄용 curl을 어디에서 다운로드 했습니까?

cygwin을 설치하고 curl을 사용하는 방법에 대한 자세한 정보는 여기로 이동하십시오.

나는 아침 내내 이것을 보냈기 때문에 누군가에게 도움이되기를 바랍니다.


적어도 내가 테스트 한 Windows 바이너리 버전 ( 현재 7.33.0 기반 Generic Win64 no-SSL 바이너리 )의 경우 명령 줄 인수가 구문 분석되는 방식에 제한이 있습니다. xmas의 대답은 해당 설정의 올바른 구문을 설명하며 배치 파일에서도 작동합니다. 제공된 예제 사용 :

curl -i -X POST -H "Content-Type: application/json" -d "{""data1"":""data goes here"",""data2"":""data2 goes here""}" http:localhost/path/to/api

명령 줄을 구문 분석하는 데 사용되는 라이브러리에 따라 달라지는 이스케이프 된 문자를 처리하지 않아도되는 더 깨끗한 대안은 표준 json 형식 텍스트를 별도의 파일에 두는 것입니다.

curl -i -X POST -H "Content-Type: application/json" -d "@body.json" http:localhost/path/to/api

  1. 작은 따옴표 ( ') 대신 큰 따옴표 ( ")를 사용하십시오.
  2. JSON 형식 따옴표를 유지하려면 두 배 ( "")를 사용해보십시오.
  3. 데이터 내부에 따옴표를 유지하려면 다음과 같이 이중 이스케이프 처리하십시오 (\\ "").

    curl ... -d "{""data1"": ""data1 goes here"", ""data2"": ""data2 goes here""}"
    curl ... -d "{""data"": ""data \\""abc\\"" goes here""}"
    

참조 URL : https://stackoverflow.com/questions/11834238/curl-post-command-line-on-windows-restful-service

반응형