【发布时间】:2021-02-19 08:07:16
【问题描述】:
我正在使用 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() 来动态发送标头和选项,但无法成功发送这些选项。以下是我的尝试:
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")}}
]
)
任何帮助将不胜感激。谢谢
【问题讨论】:
-
我在 hackney 文档中迷路了,所以希望比我更聪明的人可以参与进来,但请简要查看代码,尝试在调用
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"))或者...您可以通过在配置中设置:hackney选项来覆盖客户端模块,例如用HTTPoison或其他一些客户端替换它(考虑到HTTPoison 使用:hackney本身,这可能看起来很愚蠢)。 -
@Everett 就是这样,直接传递选项有效!非常感谢
-
酷,我将其添加为答案,以便您接受。
标签: elixir phoenix-framework http-proxy