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

使用Hackney适配器为Tesla配置代理和禁用SSL报:nxdomain错误如何解决

问题原因

:nxdomain本质是DNS解析失败错误,该报错出现的核心原因是你的Tesla客户端配置未实际生效,客户端没有按预期走代理链路发起请求,而是直接在当前网络环境解析目标请求域名失败。具体配置错误点如下:

  • Tesla v1.0及以上版本的适配器配置写法不支持你当前的写法,直接在模块内写adapter Tesla.Adapter.Hackney, ...仅适配非常早期的Tesla版本,新版本要求适配器配置必须通过plug显式声明,或包裹在配置块内。
  • Hackney适配器的入参格式错误:代理地址不需要携带http://前缀,ssl配置要求传入列表而非元组,错误格式会导致配置解析失败,适配器自动回退到默认无代理配置发起请求。
解决方案

1. 调整模块配置写法

按Tesla和Hackney的规范修正代码:

defmodule MyModule do
  use Tesla

  # 显式声明Hackney适配器及合法参数
  plug Tesla.Adapter.Hackney, 
    proxy: {"proxy.example.com", 5555},
    ssl: [verify: :verify_none]
end

2. 验证依赖和代理可用性

  • 确认mix.exs中已经正确引入对应依赖:
defp deps do
  [
    {:tesla, "~> 1.7"},
    {:hackney, "~> 1.20"}
  ]
end
  • 本地执行以下curl命令验证代理本身可用:
    curl -x http://proxy.example.com:5555 -k <你的目标请求地址>
    如果curl也出现解析错误,说明代理本身不可用,需要先排查代理服务状态。

3. 可选:动态配置写法

如果需要避免硬编码配置,可采用运行时动态配置方案:

defmodule MyModule do
  use Tesla

  # 可按需添加其他中间件
  plug Tesla.Middleware.Logger

  @adapter Application.compile_env(:my_app, __MODULE__, [])[:adapter] || Tesla.Adapter.Hackney
  @adapter_opts Application.compile_env(:my_app, __MODULE__, [])[:adapter_opts] || []

  adapter @adapter, @adapter_opts
end

后续在config.exs中维护对应配置即可。

内容的提问来源于stack exchange,提问作者Nightwolf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:27:00