使用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
相关产品推荐
相关产品推荐

