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

Node.js Request库访问HTTP站点代理返回407错误求助

问题分析与解决

核心问题在于request库处理HTTP和HTTPS请求的代理认证逻辑存在差异,你同时通过proxyUrl传递代理认证信息,又手动在headers里添加Proxy-Authorization头,两者在HTTP请求场景下发生了冲突,导致代理服务器未正确识别你的认证信息。

解决方案

直接移除headers中的Proxy-Authorization字段,仅保留proxyUrl的认证配置即可。因为request库会自动从proxyUrl中提取认证信息,并为HTTP请求生成正确的Proxy-Authorization头,手动添加反而会干扰这个过程。

修改后的代码:

const request = require('request').defaults({
    timeout: 30000,
    gzip: true,
    forever: true
});

const cookieJar = request.jar();
const proxyUrl = "http://proxyUsername:proxyPassword@proxyDomain:proxyPort";

request({
    method: "GET",
    url: "http://mylink.com",
    proxy: proxyUrl,
    jar: cookieJar,
    headers: {
      "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
      "Accept-Language": "en-GB,en-US;q=0.9,en;q=0.8",
      "Connection": "keep-alive",
      "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36",
    },
    followAllRedirects: true
}, (err, resp, body) => {
    if (err || resp.statusCode != 200) {
        if (err) {
            console.log(err);
        } else {
            console.log(resp.statusCode);
            console.log(resp.body);
        }
        return;
    }
    console.log(resp.body);
});

补充说明

  • 为什么HTTPS请求没问题?因为HTTPS请求通过CONNECT隧道与代理通信,request库会优先使用proxyUrl中的认证信息完成隧道建立,手动添加的Proxy-Authorization头不会干扰这个流程。
  • 如果修改后仍有问题,可以尝试显式配置proxyAuth字段替代proxyUrl中的认证:
    request({
        // ...其他配置
        proxy: "http://proxyDomain:proxyPort",
        proxyAuth: "proxyUsername:proxyPassword",
        // ...其他配置
    })
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:05:30