Elixir - 为 stripity_stripe 库动态设置请求 headers

Elixir - Dynamically setting request headers for stripity_stripe library

我正在使用 stripity_stripe 库并希望发送一些请求以通过代理服务器条带化而不是其他请求。因此,我正在尝试根据某些请求动态发送 hackney 选项。我查看了 stripity_stripe 库的代码和文档,但找不到任何示例来发送与代理相关的 hackney 选项。我想出了在 config.ex 文件中设置代理相关信息并且它工作正常,但由于它在配置中设置,它将应用于所有请求。

config :stripity_stripe,
  api_key: System.get_env("STRIPE_API_KEY"),
  hackney_opts: [
    {:ssl_options, [cacertfile: "CERT.pem"]},
    {:proxy, System.get_env("PROXY_SANDBOX_BASE_URL")},
    {:proxy_auth,
     {System.get_env("PROXY_SANDBOX_USERNAME"), System.get_env("PROXY_SANDBOX_PASSWORD")}}
  ]

我在 stripity_stripe 中找到了一个函数 request() 来动态发送 headers 和选项,但无法成功发送这些选项。这是我的尝试方式:

Stripe.API.request(params, :post, "tokens", %{},
      hackney_opts: [
        {:ssl_options, [cacertfile: "/Users/apple/.ssh/CERT.pem"]},
        {:proxy, System.get_env("PROXY_SANDBOX_BASE_URL")},
        {:proxy_auth,
         {System.get_env("PROXY_SANDBOX_USERNAME"), System.get_env("PROXY_SANDBOX_PASSWORD")}}
      ]
    )

如有任何帮助,我们将不胜感激。谢谢

调用 Stripe.API.request/5 时省略 hackney_options 键——直接传递选项列表,例如

Stripe.API.request(
  params, 
  :post, 
  "tokens", 
  %{}, 
  ssl_options: [cacertfile: "/Users/apple/.ssh/CERT.pem"],  
  proxy: System.get_env("VGS_SANDBOX_BASE_URL")
) 

请记住,当最后一个参数是关键字列表时,通常会省略括号。您可以将它们包括在内,以帮助更轻松地查看哪些内容属于最终参数,例如

Stripe.API.request(
  params, 
  :post, 
  "tokens", 
  %{}, 
  [
    ssl_options: [cacertfile: "/Users/apple/.ssh/CERT.pem"],  
    proxy: System.get_env("VGS_SANDBOX_BASE_URL")
  ]
)