2015-09-10 21 views
6

Voglio creare un token Github in elisir utilizzando la libreria HTTPoison, ma non riesco a capire come inviare il parametro HTTPoison.Crea token Github utilizzando Elixir HTTPoison Library

Quando si utilizza curl, sarà qualcosa di simile a this

$ curl -i -u "ColdFreak" -H "X-GitHub-OTP: 123456" -d '{"scopes": ["repo", "user"], "note" 
: "getting-started"}' https://api.github.com/authorizations 

quando uso la biblioteca HTTPoison, non riesco proprio a capire come post-it.

url = "https://api.github.com/authorizations" 
HTTPoison.post!(url, [scopes: ["repo", "user"], note: "getting-started"], %{"X-GitHub-OTP" => "12345"}) 

allora ha dato l'errore di qualcosa di simile

** (ArgumentError) argument error 
      :erlang.iolist_to_binary([{"scopes", ["repo", "user"]}, {"note", "getting-started"}]) 
    (hackney) src/hackney_client/hackney_request.erl:338: :hackney_request.handle_body/4 
    (hackney) src/hackney_client/hackney_request.erl:79: :hackney_request.perform/2 

qualcuno può dirmi come farlo nel modo giusto

documentazione del HTTPoison è here

risposta

11

Il problema è con il vostro corpo HTTPoison si aspetta un binario o una tupla nel formato {:form, [foo: "bar"]}:

HTTPoison.post!(url, {:form, [scopes: "repo, user", note: "getting-started"]}, %{"X-GitHub-OTP" => "610554"}) 

o

HTTPoison.post!(url, "{\"scopes\": \"repo, user\", \"note\": \"getting-started\"}", %{"X-GitHub-OTP" => "610554"}) 

È possibile utilizzare la libreria Poison per generare il JSON sopra:

json = %{scopes: "repo, user", note: "getting-started"} |> Poison.encode! 
HTTPoison.post!(url, json, %{"X-GitHub-OTP" => "610554"}) 
+0

keywork ': form' è necessry, non sapevo che, grazie tanto!!!! Funziona! Proverò anche 'Poison', mi hai davvero risparmiato un sacco di tempo !! –