2011-11-08 33 views
10

Tôi thiết lập một ứng dụng đường ray đơn giản mới với mục nhập mô hình, với các thuộc tính titlecontent sử dụng giàn giáo.Đăng dữ liệu JSON vào ứng dụng đường ray đơn giản với curl

bây giờ tôi đang cố gắng sử dụng curl để POST dữ liệu JSON (thay vì sử dụng trình duyệt).

sau đây dường như làm việc (ví dụ: đăng thành công với các dữ liệu null):

curl --verbose --header "Accept: application/json" --header "Content-type: application/json" --request POST --data "" http://localhost:3000/entries 

sau không làm việc:

curl --verbose --header "Accept: application/json" --header "Content-type: application/json" --request POST --data "{'content':'I belong to AAA','title':'AAA'}" http://localhost:3000/entries 

Tôi đã thử nhiều biến thể. các lỗi tôi nhận được chủ yếu là không tìm thấy máy chủ hoặc mã thông báo không mong muốn tại dữ liệu JSON.

Trả lời

6

Để đi cùng với những gì Jonathan nói , Bài đăng hiện đang gửi dữ liệu đến EntriesController. Bây giờ trong hành động create của bạn, bạn phải lấy dữ liệu từ mã băm params. Tôi sẽ giả sử bạn đang làm điều đó một cách railsy và do đó bạn sẽ làm điều gì đó như thế này:

curl -d 'entry[content]=I belong to AAA' -d entry[title]=AAA http://localhost:3000/entries' 

Trong điều khiển của bạn

Entry.create(params[:entry]) 

này nói lấy "nhập" dữ liệu từ băm params (được tạo bởi các đường ray cho bạn) và chuyển nó thành một tham số cho Entry để khởi tạo một đối tượng mới. "tạo" sẽ thực hiện "mới" và "lưu" cho bạn trong một cuộc gọi phương thức.

+0

giải quyết được sự cố. cám ơn rất nhiều. Jonathan đã giúp chúng tôi bắt đầu đi đúng hướng. cảm tạ. – delta2006

2

Tôi chạy một thử nghiệm và đã nhận lỗi MultiJson::DecodeError (743: unexpected token at '{'content':'I belong to AAA','title':'AAA'}'):

JSON đòi hỏi dấu ngoặc kép cho các phím và các chuỗi, không dấu nháy đơn. Hãy thử --data '{"content":"I belong to AAA","title":"AAA"}'

+0

cảm ơn nhưng vẫn nhận được lỗi 743 ngay cả với đề xuất của bạn. Tôi tự hỏi nếu bằng cách nào đó ứng dụng không mong đợi hoặc thích dữ liệu json này tôi đang cố gắng để POST. nó là một ứng dụng đường ray đơn giản được tạo ra bởi đường ray mới và mô hình là bởi đường ray tạo ra giàn giáo. – delta2006

+0

Thực ra, giải pháp này giả định bạn muốn chuyển JSON vào phần thân của yêu cầu, khác với dữ liệu POST như trình duyệt. Để bắt chước trình duyệt, chỉ cần sử dụng 'curl -d 'content = Tôi thuộc về AAA' -d title = AAA http: // localhost: 3000/entries' –

+0

Bắt đầu POST"/mục "cho 127.0.0.1 lúc 2011-11- 09 07:46:48 -0500 Xử lý bởi EntriesController # tạo thành */* Tham số: {"content" => "Tôi thuộc về AAA", "title" => "AAA"} ← [1m ← [35mSQL (0.0ms) ← [0m INSERT INTO "mục" ("nội dung", "created_at", "tit le", "updated_at") VALUES (?,?,?,?) [["Nội dung", nil], ["created_at", Wed, 0 9 tháng 11 năm 2011 12:46:48 UTC cho: 00], ["title", nil], ["updated_at", Wed, 09 Nov 2011 12:46:48 UTC + 00:00]] Chuyển hướng thành http: // localhost: 3000/entries/46 Đã hoàn thành 302 Tìm thấy trong 0ms – delta2006

0

mất một khối JSON

{\"a\":\"this_is_a\"} 

và url mã hóa nó

%7B%22a%22%3A%22this_is_a%22 

và sau đó sử dụng curl để đăng nó

curl -i --data "working_params=%7B%22a%22%3A%22this_is_a%22" http://url/accepts/json 
+0

Bạn có thể hiển thị phần "mã hóa url" không? –

+0

Thời gian để khám phá. Hãy thử: http://meyerweb.com/eric/tools/dencoder/ để giúp bạn bắt đầu. – sorens

+0

$$$$$$$$ Cảm ơn! –

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