You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用HTTPoison发起请求时遭遇CaseClauseError问题求助

解决HTTPoison请求中的CaseClauseError问题

问题原因

你遇到的CaseClauseError是因为Hackney(HTTPoison依赖的底层HTTP客户端)无法直接处理Elixir Map作为请求体。Hackney的handle_body/4函数只接受特定类型的输入(如二进制字符串、列表或流),而你直接传入了未编码的Map,导致没有匹配的case分支。

解决方案

需要将Map编码为JSON二进制字符串,并在请求头中指定Content-Type: application/json,这样Hackney能正确处理请求体,同时服务端也能识别请求格式。

修正后的代码

# 1. 将Map编码为JSON二进制
body = %{entity: %{some: "asdfasdf", parameters: "qwerqwer"}} |> Jason.encode!()

# 2. 更新请求头,添加Content-Type标识
headers = Keyword.put(headers, "Content-Type", "application/json")

HTTPoison.request(
  method,
  uri,
  body,
  headers,
  timeout: 30000,
  recv_timeout: 30000
)

额外说明

  • 若项目未集成Jason库(Phoenix项目默认已包含),需在mix.exs的依赖中添加:
    defp deps do
      [
        {:jason, "~> 1.0"}
      ]
    end
    
  • 如果服务端要求其他请求格式(如form-data),需对应将Map编码为该格式的二进制字符串,并设置匹配的Content-Type。

内容的提问来源于stack exchange,提问作者Hannele

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 18:42:35