Duplicates Elixir HTTPoisin.get避免响应数据中的重复数据消除

Duplicates 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

我正在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: [%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
在任何情况下都会改变身体。