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

Axios请求第三方SOAP API时IP地址连接被拒绝问题求助

问题描述

向第三方SOAP API发起请求时,直接使用IP地址http://XXX.XXX.XXX.XXX:40871收到连接拒绝错误:

{
    "success": false,
    "error": "connect ECONNREFUSED XXX.XXX.XXX.XXX:40871",
    "trace": "Error: connect ECONNREFUSED XXX.XXX.XXX.XXX:40871\n    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16)"
}

本地通过修改hosts文件将该IP映射为域名my-host-name.com后,请求http://my-host-name.com:40871可正常响应。但生产环境部署在Heroku,无法修改hosts文件,且第三方API要求白名单静态IP,当前使用Axios配合HttpsProxyAgent通过静态IP代理请求。

解决方案

核心原因是第三方服务器大概率基于Host请求头做路由或白名单校验:本地修改hosts后,请求的Host头会被自动设置为映射的域名;而直接用IP请求时,Host头是IP地址,导致服务器判定为非法请求并拒绝连接。

方法1:手动添加Host请求头(优先推荐)

在请求的headers中显式添加Host字段,值为本地映射的域名my-host-name.com,同时保留IP作为baseURL。修改后的请求体示例:

{
    "method": "POST",
    "baseURL": "http://XXX.XXX.XXX.XXX:40871",
    "url": "/IDORequestService/IDOWebService.asmx",
    "data": {{xmlBody}},
    "headers": {
      "Content-type": "text/xml",
      "SOAPAction": "http://frontstep.com/IDOWebService/CreateSessionToken",
      "Accept": "*/*",
      "Accept-Encoding": "gzip, deflate, br",
      "Connection": "keep-alive",
      "Host": "my-host-name.com"
  }
}

此方法完全模拟了hosts映射后的请求头结构,让第三方服务器识别为合法请求。

方法2:适配代理与请求协议匹配

当前代码使用HttpsProxyAgent,但目标API是HTTP协议。若代理服务器支持HTTP代理,可替换为HttpProxyAgent(需先安装http-proxy-agent包),避免代理协议不匹配的潜在问题:

const { HttpProxyAgent } = require('http-proxy-agent');
const agent = new HttpProxyAgent(process.env.STATIC_URL!);
const baseOptions: AxiosRequestConfig = {
    proxy: false,
    httpAgent: agent, // 改用httpAgent适配HTTP请求
};
const instance = axios.create(baseOptions);

若代理仅支持HTTPS,则保留HttpsProxyAgent即可,核心仍需配合方法1添加Host头。

环境信息
  • Axios v0.27.2
  • https-proxy-agent: v5.0.1
  • Node.js v16.16.0
  • 部署环境:Heroku;本地OS:Windows 11/Linux Mint 19.3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:18:37