Как преобразовать запрос CURL в запрос Httpoison в Elixir Phoenix - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь преобразовать запрос CURL с помощью HTTPoison в Elixir Phoenix.Когда я запускаю запрос CURL commend, он работает нормально. Я получаю сообщение об ошибке «415 Unsupported media type» при попытке использовать HTTPoison.

Phoenix / Elixir - cURL работает, но HTTPoison завершается ошибкой

Вот мой запрос CURL

curl -u "user:password" -i -H "Accept:application/json" -X POST -d
 "amount=100&method=0&type=bank&receiver=CCC&info1=hello" 
 http://00.000.000.00:8080/services/id/999999111999/calculate

Вот мой запрос Httpoison

url = "myurl"
orderid = "myorderid"
headers = ["Accept", "application/json"]
request_body = '{"type" : "bank", 
         "method" : 0,
         "amount" : #{amount},
                 "receiver" : "CCC"
         "info1" : #{orderid}}'
dicoba = HTTPoison.post(url, headers, request_body, hackney: [basic_auth: {"#{user}", "#password"}]) |> IO.inspect

1 Ответ

0 голосов
/ 06 мая 2019

Запрос curl находится в типе содержимого application / x-www-form-urlencoded , но ваш запрос HTTPoison, ну, в общем-то, искажен.Вы передали charlist в тело запроса, где HTTPoison ожидает двоичный файл, и вы не указали тип содержимого запроса.

Чтобы создать application / x-www-form-urlencoded В теле запроса вы можете использовать функцию URI.encode_query/1.

url = "http://00.000.000.00:8080/services/id/999999111999/calculate"
payload = %{
  "amount" => 100,
  "method" => 0,
  "type" => "bank",
  "receiver" => "CCC",
  "info1" => "hello"
}
request_body = URI.encode_query(payload)
headers = [
  {"Accept", "application/json"}, 
  {"Content-Type", "application/x-www-form-urlencoded; charset=utf-8"}
]
dicoba = HTTPoison.post(url, headers, request_body, hackney: [basic_auth: {"#{user}", "#password"}])
...