Node.js Axios 使用 DF-IP HTTP 代理:配置、认证与错误处理

Axios 在 Node.js 中可以通过代理配置对象使用 DF-IP HTTP 连接。本教程用于服务器或本地 Node.js 脚本,不适用于浏览器前端通过一个 Axios 参数改变浏览器的代理设置,也不应把代理密码交给前端页面。

配置与检查示意图

查看大图

准备 DF-IP 连接信息

静态住宅从已购列表复制 IP、所选协议的端口及 proxy_username、proxy_password,并确认记录仍有效。动态住宅选择住宅类型、地区、协议和会话后提取;默认结果为 用户名:密码@主机:端口,请完整保留生成的用户名与密码。这里使用的是代理认证信息,不是网站登录密码或 API Key。

填写项应填内容
主机静态 IP 或动态网关,不带协议前缀
端口HTTP 对应 http_port,SOCKS5 对应 s5_port;动态使用所选协议的提取端口
用户名、密码同一条连接的完整代理认证信息,不要混用两次提取结果

需要程序化获取信息时,参考静态记录查询与动态代理提取。

环境与连接参数

把以下变量交给你自己的运行环境或密钥管理工具注入。示例主机只支持 IPv4 或域名,不支持 IPv6 字面地址。

变量内容
DFIP_PROXY_HOSTHTTP 代理主机,不含协议前缀
DFIP_PROXY_PORTHTTP 端口,1–65535
DFIP_PROXY_USERNAME、DFIP_PROXY_PASSWORD完整代理用户名与密码
DFIP_TEST_URL自己有权访问的 HTTPS 测试地址;缺省使用 example.com

不要把真实凭证写进代码仓库、URL 截图或共享日志。示例不输出代理 URL、认证字段或完整异常对象。

运行示例

在自己的 Node.js 项目中安装 axios,保存为 check-proxy.mjs,注入变量后运行 node check-proxy.mjs。示例使用 Node.js 的默认适配方式;不要换成浏览器或自定义 fetch 适配器后仍假定代理对象按同样方式生效。

import axios from 'axios';

function required(name) {
  const value = process.env[name];
  if (!value) throw new Error('Missing connection setting');
  return value;
}

async function main() {
  let client;
  let target;
  try {
    const host = required('DFIP_PROXY_HOST').trim();
    const portText = required('DFIP_PROXY_PORT');
    const port = Number(portText);
    if (!host || /[\s/:@?#\[\]\\]/.test(host) || !/^\d+$/.test(portText) ||
        !Number.isInteger(port) || port < 1 || port > 65535) {
      throw new Error('Invalid host or port');
    }
    target = process.env.DFIP_TEST_URL || 'https://example.com/';
    if (!target.startsWith('https://')) throw new Error('Use an HTTPS test URL');
    client = axios.create({
      proxy: {
        protocol: 'http',
        host,
        port,
        auth: {
          username: required('DFIP_PROXY_USERNAME'),
          password: required('DFIP_PROXY_PASSWORD'),
        },
      },
      timeout: 30000,
      maxRedirects: 0,
      responseType: 'text',
    });
  } catch {
    console.error('Invalid or missing connection settings');
    process.exitCode = 1;
    return;
  }
  try {
    const response = await client.get(target);
    console.log('HTTP status:', response.status);
    console.log('Response bytes:', Buffer.byteLength(response.data, 'utf8'));
  } catch (error) {
    console.error('Request failed:', error.response?.status ?? error.code ?? 'UNKNOWN');
    process.exitCode = 1;
  }
}

await main();

关键配置

proxy.protocol 描述代理连接,本例使用 HTTP;目标地址仍可以是 HTTPS。认证通过 auth 对象提供,用户名、密码应保持原始完整值,不要像拼 URL 那样提前百分号编码。Axios 的配置含义见 Axios 官方 request config。

本例设置 30 秒请求超时并禁用自动跳转。Axios 默认把非 2xx 响应作为错误处理,因此 3xx 在这里也会进入错误分支;检查跳转地址后再决定是否调整行为。超时与重试策略仍应服从你整个业务任务的时间预算。

验证与常见误区

先请求一个可访问的测试页,随后把 DFIP_TEST_URL 改为可信的出口检测地址。在本地受控调试中按该服务返回格式读取出口字段,确认地区和目标访问;状态 200 只代表该次 HTTP 请求成功,不能单独证明选对了地区。

静态 HTTP 端口与 SOCKS5 端口不能互换。Axios 这里的内置代理对象没有演示 SOCKS5;若任务只提供 SOCKS5,应采用经过验证的代理 Agent 方案或使用Python SOCKS 说明,不要只将 protocol 改成 socks5。

错误日志仅记录状态或错误码,不打印 error.config、完整异常或请求头。遇到 407 先检查完整认证信息,超时则按分阶段排查定位。当前连接可在 DF-IP 控制台 获取。

English version

最近修改: 2026-09-13