Elixir-动态设置条带性\u条带库的请求头
我正在使用stripity_stripe库,希望通过代理服务器向stripe发送一些请求,但不发送其他请求。因此,我尝试在一些请求上动态发送hackney选项。我查阅了stripity_stripe库的代码和文档,但找不到任何示例来发送与代理相关的hackney选项。我想在config.ex文件中设置与代理相关的信息,它可以正常工作,但由于它是在配置中设置的,因此它将应用于所有请求Elixir-动态设置条带性\u条带库的请求头,elixir,phoenix-framework,http-proxy,Elixir,Phoenix Framework,Http Proxy,我正在使用stripity_stripe库,希望通过代理服务器向stripe发送一些请求,但不发送其他请求。因此,我尝试在一些请求上动态发送hackney选项。我查阅了stripity_stripe库的代码和文档,但找不到任何示例来发送与代理相关的hackney选项。我想在config.ex文件中设置与代理相关的信息,它可以正常工作,但由于它是在配置中设置的,因此它将应用于所有请求 config :stripity_stripe, api_key: System.get_env("
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")}}
]
)
任何帮助都将不胜感激。谢谢在调用
Stripe.API.request/5
时忽略hackney\u选项
键--只需直接传递选项列表,例如
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")
]
)
我在hackney文档中迷失了方向,所以希望比我更聪明的人能加入进来,但是简单地看一下代码,在调用
Stripe.API.request/5
时,试着省略hackney_选项
键,只需列出选项列表,例如Stripe.API.request(params,:post,“tokens”,%{},ssl_选项:[cacertfile:“/Users/apple/.ssh/CERT.pem”],proxy:System.get_env(“VGS\u SANDBOX\u BASE\u URL”)
或者……您可以通过在配置中设置:hackney
选项来覆盖客户端模块,例如,将其替换为HTTPoison
或其他客户端(考虑到HTTPoison使用:hackney
本身,这可能看起来很愚蠢)@Everett就是这样,直接传递选项起作用了!非常感谢你的帮助,我添加了它作为答案,这样你就可以接受它了。