Duplicates Elixir HTTPoisin.get避免响应数据中的重复数据消除
我正在elixir中调用HTTP Rest APIDuplicates Elixir HTTPoisin.get避免响应数据中的重复数据消除,duplicates,elixir,httpoison,Duplicates,Elixir,Httpoison,我正在elixir中调用HTTP Rest API url = "http://localhost:8080/getScoreData" case HTTPoison.get(url) do {:ok, %{status_code: 200, body: body}} -> Logger.info("body is #{inspect(body)}") overall_score = Jason.decode!(body, as: [%Overa
url = "http://localhost:8080/getScoreData"
case HTTPoison.get(url) do
{:ok, %{status_code: 200, body: body}} ->
Logger.info("body is #{inspect(body)}")
overall_score = Jason.decode!(body, as: [%OverallScore{}])
{:ok, overall_score}
end
在web浏览器中返回
{
"avgPass": 85.55,
"avgFail": 14.45,
"totalStudents": 80.0,
"myScoreSchema": [
{
"average": 80.0,
"count": 8.0,
"percent": 80.0,
"name": "John"
},
{
"average": 0.0,
"count": 0.0,
"percent": 0.0,
"name": "Cena"
},
{
"average": 0.0,
"count": 0.0,
"percent": 0.0,
"name": "Sunny"
},
{
"average": 0.0,
"count": 0.0,
"percent": 0.0,
"name": "Michael"
}
]
}
但是日志是从上面代码的Logger.info(“body是#{inspect(body)}”)
行开始的
返回数据,并返回下面的数据
{
"avgPass": 85.55,
"avgFail": 14.45,
"totalStudents": 80.0,
"myScoreSchema": [
{
"average": 80.0,
"count": 8.0,
"percent": 80.0,
"name": "John"
},
{
"average": 0.0,
"count": 0.0,
"percent": 0.0,
"name": "Cena Sunny Michael"
}
]
}
尽管这是一项智能功能,但我不希望使用此重复数据消除功能。如何避免重复数据消除。要消除HTTPoison是否真的在进行重复数据消除,您可以使用elixir首先获取原始响应:
defmodule Testmodule.HttpClient do
def send_request(request, callback_host, callback_port) when is_integer(callback_port) do
# Convert to charlist, as that's what the erlang function is expecting.
some_host_in_net = callback_host |> String.to_charlist
{:ok, socket} =
:gen_tcp.connect(some_host_in_net, callback_port, [:binary, packet: :raw, active: false])
:ok = :gen_tcp.send(socket, request)
# Check response status
case :gen_tcp.recv(socket, 0) do
{:ok, response} -> :ok = :gen_tcp.close(socket)
response
{:error, :closed} -> IO.puts "Something went wrong."
end
end
end
使用以下内容定义您的测试请求:
def request_pool do
"""
GET /getScoreData HTTP/1.1
Host: localhost
User-Agent: ExampleBrowser/1.0
Accept: */*
messagebody here
"""
end
最后,您可以使用Elixir/Erlang调用端点:
Testmodule.HttpClient.send_request(request, "127.0.0.1", 8080)
这会让你看到你在浏览器中看到的东西,此时你可以随心所欲地解析它
但是,一旦您尝试使用Poison.decode转换它,请记住它可能会重复您的数据,因为它可能会将重复的键视为值的更新,而不是允许重复的键存在于映射中。您是否可以尝试
HTTPoison.get!"http://localhost:8080/getScoreData“
在iex
中发布您得到的信息?HTTPoison
不太可能消除重复数据。@AlekseiMatiushkin:是的,尝试了之后,它仍然可以消除重复数据。您可以尝试curl吗http://localhost:8080/getScoreData
在终端中?您使用的是哪个版本的httpoison
。@z5ottu我不相信httpoison
在任何情况下都会改变身体。