2013-09-04 2 views
97

나는 성공적으로 다음 명령을 실행 curl을 통해 장소를 만들 수 있습니다말풍선에 JSON 파일을 통해 페이로드를 전달하는 방법은 무엇입니까?

$ curl -vX POST https://server/api/v1/places.json -d " 
    auth_token=B8dsbz4HExMskqUa6Qhn& \ 
    place[name]=Fuelstation Central& \ 
    place[city]=Grossbeeren& \ 
    place[address]=Buschweg 1& \ 
    place[latitude]=52.3601& \ 
    place[longitude]=13.3332& \ 
    place[washing]=true& \ 
    place[founded_at_year]=2000& \ 
    place[products][]=diesel& \ 
    place[products][]=benzin \ 
" 

서버는 HTTP/1.1 201 Created를 반환합니다.
지금 나는이처럼 보이는 JSON 파일에 페이로드를 저장할 :

// testplace.json 
{ 
    "auth_token" : "B8dsbz4HExMskqUa6Qhn", 
    "name" : "Fuelstation Central", 
    "city" : "Grossbeeren", 
    "address" : "Buschweg 1", 
    "latitude" : 52.3601, 
    "longitude" : 13.3332, 
    "washing" : true, 
    "founded_at_year" : 2000, 
    "products" : ["diesel","benzin"] 
} 

그래서 나는 명령이 다음과 같이 실행되도록 수정이 HTTP/1.1 401 Unauthorized을 반환 실패

$ curl -vX POST http://server/api/v1/places.json -d @testplace.json 

. 왜?

답변

158

curlapplication/x-www-form-urlencoded의 기본 콘텐츠 형식으로 POST 요청을 보냅니다. 당신이 JSON 요청을 보내려면, 올바른 콘텐츠 형식 헤더를 지정해야합니다 :

$ curl -vX POST http://server/api/v1/places.json -d @testplace.json \ 
--header "Content-Type: application/json" 

그러나 서버가 JSON 입력을 허용하는 경우 그에만 작동합니다. URL의 끝에있는 .json출력이 인 것을 나타낼 뿐이며 json 입력을 처리한다는 것을 의미하지는 않습니다. API 문서를 통해 힌트를 얻을 수 있습니다.

401이 아닌 다른 오류가 발생하지 않는 이유는 서버가 귀하의 요청에서 auth_token을 추출 할 수 없기 때문일 수 있습니다.

+0

나는'@ file.json'을 사용할 수 있다는 것을 알게 될 때까지'cat file.json'을'-d' 다음에 사용하려하고 문제가 생겼습니다. 고마워요 :) – shadi

+0

@ 마타 수 제발 질문에보세요 [http://stackoverflow.com/questions/42021113/how-to-use-curl-to-access-the-github-graphql-api] –

+0

참고 여러 개의 헤더가 필요하다면 우분투에서 bash로 테스트했을 때'-H' /'--header'를 여러 번 지정할 필요가 있습니다. –

관련 문제