2015-10-25 7 views
6

Ich versuche, eine Curl-Anfrage mit dem RestClient Ruby Juwel nachzuahmen, und bis jetzt hatte ich eine Menge Probleme beim Versenden einer Nutzlast. Meine curl Anfrage sieht so etwas wie dieseSo senden Sie Daten in einer Post-Anfrage mit RestClient

curl URL -X POST -u API_KEY -d '{"param_1": "1"}'

ich versucht habe dies so etwas wie dies mit RestClient zu replizieren mit:

RestClient::Request.execute(method: :post, url: URL, user: API_KEY, payload: {"param_1" => "1"})

Ach, halte ich 400 bekommen - Bad Anfragen Fehler wenn Sie das tun. Sendet ich Daten falsch? Sollte ich etwas anderes als Nutzlast verwenden?

Antwort

6

Wechsel:

payload: {"param_1" => "1"}) 

An:

payload: '{"param_1": "1"})' 

Auch geben die headers.

Also, es wird:

RestClient::Request.execute(method: :post, 
          url: 'your_url', 
          user: 'API_KEY', 
          payload: '{"param_1": "1"}', 
          headers: {"Content-Type" => "application/json"} 
          ) 
+0

Alles funktioniert gut mit cURL. Ich bin gespannt wie ich die gleichwertige Abfrage mit RestClient machen würde – rboling

+0

Danke für die Hilfe! Letztendlich musste ich ein Argument einreichen, um klarzustellen, dass meine Daten in JSON gesendet wurden. – rboling

+0

Ja, Sie hatten ein anderes Problem, dass Ihre 'Nutzlast' keine Zeichenfolge war, es war ein Hash. Meine Antwort ging auf dieses Problem ein. Wenn es nicht funktioniert, würde ich Ihnen sagen, dass Sie die Option 'headers' hinzufügen müssen. Aber du hast das schon gemacht, das ist großartig :) –

1

Stellt sich heraus, ich hatte ein Argument hinzufügen, um festzulegen, dass meine Daten in einem JSON-Format war. Die richtige Antwort war so etwas wie dieses: RestClient::Request.execute(method: :post, url: URL, user: API_KEY, payload: '{"param_1": "1"}', headers: {"Content-Type" => "application/json"})

+0

Sie könnten die Antwort von @K M Rakibul Islam checken; Rboling – illusionist

2

Just Change:

payload: {"param_1" => "1"} 

An:

payload: {"param_1" => "1"}.to_json 

So, dann wird es:

RestClient::Request.execute(method: :post, 
          url: 'your_url', 
          user: 'API_KEY', 
          payload: {"param_1" => "1"}.to_json, 
          headers: {"Content-Type" => "application/json"} 
          ) 
Verwandte Themen