如何用Elixir依赖HTTPoison替代curl向Stripe发送HTTP请求?
用Elixir的HTTPoison调用Stripe API
没问题!你的curl请求是一个带基础认证的GET请求,用来获取前3个Stripe客户。下面是对应的HTTPoison实现,我会拆解每个部分对应curl的逻辑:
首先,确保你已经在项目的mix.exs里添加了HTTPoison依赖并安装好:
defp deps do [ {:httpoison, "~> 2.0"} ] end
执行mix deps.get完成依赖安装。
接下来是实际的请求代码:
defmodule StripeClient do alias HTTPoison.Response alias HTTPoison.Error def list_customers(limit \\ 3) do # Stripe API的基础请求地址 url = "https://api.stripe.com/v1/customers" # 你的测试密钥,对应curl里的`-u`参数 api_key = "sk_test_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # 构建Basic Auth头部:Stripe要求用API密钥作为用户名,密码留空 auth_header = "Basic " <> Base.encode64("#{api_key}:") # 发送GET请求,带上认证头和查询参数 case HTTPoison.get(url, [{"Authorization", auth_header}], params: %{limit: limit}) do {:ok, %Response{status_code: 200, body: body}} -> # 解析JSON响应(需要的话,记得添加Jason依赖来处理) Jason.decode(body) {:ok, %Response{status_code: status_code, body: body}} -> {:error, "请求失败,状态码:#{status_code},响应内容:#{body}"} {:error, %Error{reason: reason}} -> {:error, "连接出错:#{reason}"} end end end
代码对应curl的细节说明:
- 基础认证:curl里的
-u sk_test_xxx:等价于设置Authorization: Basic <base64编码的"sk_test_xxx:">,这里用Base.encode64/1完成编码逻辑。 - GET参数:curl的
-G和?limit=3对应HTTPoison的params: %{limit: limit}选项,HTTPoison会自动把这个Map转换成URL查询字符串,不用手动拼接。 - 请求方法:curl默认使用GET方法,所以这里直接调用
HTTPoison.get/3即可。
如果需要解析JSON响应,记得在mix.exs里补充Jason依赖:
defp deps do [ {:httpoison, "~> 2.0"}, {:jason, "~> 1.4"} ] end
你直接调用StripeClient.list_customers()就能测试,和原来的curl请求效果完全一致~
内容的提问来源于stack exchange,提问作者pengfei xu
相关产品推荐
相关产品推荐

