2014-06-06 11 views
6

Ich habe eine einfache API mit Sinatra erstellt, die eine E-Mail basierend auf übermittelten JSON-Daten sendet. Ich kann ein Formular erstellen, die JSON-Daten über das Formular übermitteln und auf Parameter zugreifen, um das An, den Betreff und den Text der E-Mail zu erhalten. Ich versuche jedoch, CURL zu verwenden, um die API zu testen, und scheint nicht zu funktionieren. Ich nehme an, dass meine Formatierung in der cURL-Anfrage abgebrochen ist. Unten ist eine cURL-Anfrage, die ich versucht habe, sowie die Ausgabe von params sowie ein Versuch Params mit dem JSON-Juwel zu parsen.JSON über cURL POST-Anfrage an Sinatra senden

Ich neige dazu, params mit einem riesigen Schlüssel, der eine Zeichenfolge meiner JSON-Daten mit einem Wert von Null ist. Ich habe versucht, Content-Type: application/json hinzuzufügen, und wenn ich dies tue, ist params leer. Hier

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 

ist das params-Hash, der zurückgegeben wird ...

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

Ich versuche Umwandlung, dies zu etwas nützlicher mit JSON params, und dann erhalte ich die folgende ...

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

Ich habe einen soliden Tag auf diesem verbracht, habe 20 stackoverflow Beiträge über ähnliche Probleme gelesen, und bin immer noch ratlos, so dass jeder Rat hilfreich wäre. Prost!

+0

Der Curl-Befehl scheint auf den ersten Blick ok. Ohne den Sinatra-Code zu sehen, können wir Ihnen jedoch nicht helfen. Bitte stellen Sie ein minimales Beispiel zusammen, das das Problem aufweist. –

+0

Ich habe es ... keine Notwendigkeit, mit Params herumzualbern. Ich kann die JSON-Nutzlast als Hash erhalten, indem Sie Folgendes tun ... Nutzlast = JSON.parse (request.body.read) –

+0

Bitte fügen Sie die Antwort unten und markieren Sie als akzeptiert. Vielen Dank! –

Antwort

10

Ich habe es ... keine Notwendigkeit, herumalbern mit Params. Ich kann die JSON-Nutzlast als einen Hash erhalten, indem Sie Folgendes tun ...

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

Das Rack-Contrib-Modul Rack :: PostBodyContentTypeParser wird dies auch für Sie tun. Der Rack-Parameterhash wird durch Deserialisierung der JSON-Daten gefüllt, die im Anfragetext bereitgestellt werden, wenn der Inhaltstyp "application/json" lautet. Siehe https://github.com/rack/rack-contrib – nateware