2013-09-04 34 views
97

tôi thành công có thể tạo ra một nơi qua curl thực hiện các lệnh sau:Làm thế nào để chuyển tải trọng thông qua tệp JSON cho curl?

$ 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 \ 
" 

Máy chủ trả HTTP/1.1 201 Created.
Bây giờ tôi muốn để lưu trữ các tải trọng trong một tệp JSON mà trông như thế này:

// 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"] 
} 

Vì vậy, tôi sửa đổi lệnh được thực thi như thế này:

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

này vẫn thất bại trở về HTTP/1.1 401 Unauthorized. Tại sao?

Trả lời

158

curl gửi yêu cầu POST với loại nội dung mặc định là application/x-www-form-urlencoded. Nếu bạn muốn gửi yêu cầu json, bạn sẽ phải chỉ định đúng tiêu đề loại nội dung:

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

Nhưng điều đó sẽ chỉ hoạt động nếu máy chủ chấp nhận đầu vào json. Các .json ở cuối url chỉ có thể chỉ ra rằng đầu ra là json, nó không nhất thiết có nghĩa là nó cũng sẽ xử lý json đầu vào. Tài liệu API sẽ cung cấp cho bạn một gợi ý rõ ràng nó có hay không.

Lý do bạn nhận được 401 và không phải một số lỗi khác có thể do máy chủ không thể giải nén auth_token từ yêu cầu của bạn.

+0

Tôi đã cố gắng sử dụng 'cat file.json' sau' -d' và gặp sự cố với nó, cho đến khi tôi biết được câu trả lời này có thể sử dụng '@ file.json'. Cảm ơn :) – shadi

+0

@mata Có thể vui lòng xem xét câu hỏi [http://stackoverflow.com/questions/42021113/how-to-use-curl-to-access-the-github-graphql-api] –

+0

lưu ý rằng nếu bạn cần nhiều tiêu đề, bạn cần phải xác định '-H' /' --header' nhiều lần, ít nhất là khi được thử nghiệm trong bash trên Ubuntu. –

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