WINDOWS RESTful 서비스의 cURL POST 명령 줄
내 문제 : POST 요청과 함께 일부 데이터를 보내는 동안 명령 줄 도구를 사용하여 내 localhost 서버를 컬링하는 것이 작동하지 않습니다.
오류의 원인 인 것 같습니다. 다음과 같은 것을 상상해보십시오 .
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 바이너리 버전 ( 현재 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
- 작은 따옴표 ( ') 대신 큰 따옴표 ( ")를 사용하십시오.
- JSON 형식 따옴표를 유지하려면 두 배 ( "")를 사용해보십시오.
데이터 내부에 따옴표를 유지하려면 다음과 같이 이중 이스케이프 처리하십시오 (\\ "").
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
'programing tip' 카테고리의 다른 글
EditorFor ()에 형식이 지정된 날짜 표시 (0) | 2020.12.28 |
---|---|
onClick이 자식과 함께 LinearLayout에서 트리거되지 않았습니다. (0) | 2020.12.28 |
설치된 코코아 포드의 버전을 확인하는 방법은 무엇입니까? (0) | 2020.12.28 |
JavaScript 런타임을 찾을 수 없습니다. (0) | 2020.12.28 |
순수한 Javascript를 사용하여 HTML 요소의 크기를 조정하는 방법은 무엇입니까? (0) | 2020.12.28 |