Node.js - 请求:指定可以处理http&的自定义代理HTTPS

时间:2017-08-07 12:38:01

标签: node.js request

我使用request.defaults(..) - 除其他外 - 为我的请求设置了自定义http代理(设置maxSocketskeepAlive)。

const agent = new http.Agent({
        keepAlive: true,
        maxSockets: 42
      })
const requestWithCustomAgent = request.defaults({
        agent,
        json: true,
        headers: {
          'User-Agent': 'amazing agent'
        }        
      })

使用方案https访问网址时,此错误会显示Error: Protocol "https:" not supported. Expected "http:"。反之亦然https.Agent和方案http

有没有办法告诉"请求与一个代理处理http请求,https处理另一个代理?

人们可以投入一些独角兽的血液并做黑暗魔法,如:

if(url.startsWith('https') {/* use on agent */} else { /* use the other */}

但这感觉很糟糕。

类似于:

const requestWithCustomAgent = request.defaults({
    agents: {
       'http': httpAgent,
       'https': httpsAgent
    },
    json: true,
    headers: {
      'User-Agent': 'amazing agent'
    }        
  })

可能?

帮助赞赏;)

1 个答案:

答案 0 :(得分:1)

如果您使用agentOptions而不是传递http(s).Agent个实例,request将为您使用的每个方案创建一个代理:

const requestWithCustomAgent = request.defaults({
  agentOptions : {
    keepAlive  : true,
    maxSockets : 42
  },
  json    : true,
  headers : {
    'User-Agent': 'amazing agent'
  }        
})