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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:19:38