2014-06-06 22 views
6

Stworzyłem prosty interfejs API z Sinatra, który wysyła wiadomość e-mail na podstawie przesłanych danych JSON. Mogę utworzyć formularz, przesłać dane JSON za pośrednictwem formularza i uzyskać dostęp do parametrów, aby uzyskać treść, temat i treść wiadomości e-mail. Jednak próbuję użyć cURL, aby przetestować interfejs API i nie mogę sprawić, aby coś działało. Zakładam, że moje formatowanie w żądaniu cURL zostało przerwane. Poniżej znajduje się zapytanie cURL, które wypróbowałem, jak również dane wyjściowe parametrów, jak również próba przeanalizowania params z klejnotem JSON.Wysyłanie JSON za pośrednictwem żądania CURL POST do Sinatry

Staram się uzyskać params z gigantycznym kluczem, który jest ciągiem moich danych JSON o wartości zerowej. Próbowałem dodać Content-Type: application/json, a kiedy to zrobię, params jest pusty.

curl -X POST -H "Accept: application/json" -d '{ "to": "Brantley <[email protected]>", "subject": "hello world", "body": "Hi Jennifer! Sending you an email via this API I just made." }' http://localhost:9393/send-email 

Oto hash params, który jest zwracany ...

{"{ \"to\": \"Brantley <[email protected]>\", \"subject\": \"hello world\", \"body\": \"Hi Jennifer! Sending you an email via this API I just made.\" }"=>nil} 

Staram konwersji to na coś bardziej użytecznego z JSON params, a następnie pojawia się następujący ...

{\"{ \\\"to\\\": \\\"Brantley <[email protected]>\\\", \\\"subject\\\": \\\"hello world\\\", \\\"body\\\": \\\"Hi Jennifer! Sending you an email via this API I just made.\\\" }\":null}" 

Spędziłem w tym dniu solidny dzień, przeczytałem 20 postów o tym samym problemie i nadal jestem zakłopotany, więc każda rada byłaby pomocna. Twoje zdrowie!

+0

Polecenie curl wydaje się być w porządku na pierwszy rzut oka. Nie widząc kodu Sinatry, nie możemy ci jednak pomóc. Proszę złożyć minimalny przykład, który wykazuje problem. –

+0

Mam to ... nie trzeba się wygłupiać z parametrami. Mogę pobrać ładunek JSON jako skrót, wykonując następujące czynności: payload = JSON.parse (request.body.read) –

+0

Proszę dodać odpowiedź poniżej i oznaczyć jako zaakceptowane. Dzięki! –

Odpowiedz

10

Rozumiem ... nie trzeba się wygłupiać z parametrami. Mogę uzyskać ładunek JSON jako hasza, wykonując następujące czynności:

payload = JSON.parse(request.body.read) 
+0

Moduł przyrostowy Rack Rack :: PostBodyContentTypeParser zrobi to również dla ciebie. Hash parametru Rack jest wypełniany przez deserializację danych JSON podanych w treści żądania, gdy Content-Type to application/json. Zobacz https://github.com/rack/rack-contrib – nateware

Powiązane problemy