2016-07-13 8 views
0

Der Code, mit denen ich versuche, ist: -Kann HTTP-Post-Anfrage mit Elixir nicht gemacht werden?

response = HTTPotion.post(url, [body: "{channel: \"#bot\", username: \"watson\", text: \"test\"}"]) 

Die Antwort i bin immer: -

%HTTPotion.Response{body: "invalid_payload",......, status_code: 400} 
+2

Sie haben eine Post-Anfrage und es zurückgegeben. Das Problem ist, dass der Server mit "falscher Anfrage" antwortet. Sie müssen wahrscheinlich etwas anderes an Ihren Server senden und es ist kein Problem mit Elixier, sondern der Inhalt der Nachricht. – tkowal

+0

Dies ist die Probe Curl Anfrage, die funktioniert: - curl -X POST URL -d '{"Kanal": "Bot", "Benutzername": "AB", "Text": "test"}' –

+0

Alles was ich will zu wissen ist bekannt, die Datenparameter in der Anfrage zu senden –

Antwort

2

Sie haben eine erfolgreiche Anforderung, aber der Körper war falsch. In JSON sollte es Anführungszeichen um den Feldnamen sein:

[body: "{\"channel\": \"#{bot}\", \"username\": \"watson\", \"text\": \"test\"}"] 

auch die Syntax für String-Interpolation ist #{variable_name} zum Beispiel:

iex(1)> bot = "mybot" 
iex(2)> "#{bot}" 

manuell codiert, JSON ist fehleranfällig, so dass Sie wahrscheinlich Poison verwenden möchten.

iex(3)> Poison.encode!(%{bot: bot, username: "watson", text: "test"}) 
"{\"username\":\"watson\",\"text\":\"test\",\"bot\":\"mybot\"}" 
+0

Vielen Dank. Das hat mein Problem gelöst. –

Verwandte Themen