2017-08-07 58 views
0

我使用request.defaults(..) - 除其他外 - 爲我的請求設置自定義http代理(設置maxSocketskeepAlive)。Node.js - 請求:指定自定義代理,可以處理http和https

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

當訪問與方案中的URL https這個錯誤與Error: Protocol "https:" not supported. Expected "http:"。反之亦然https.Agent和計劃http

有什麼辦法可以「告訴」請求處理與一個代理http請求和https與另一個?

一個可以投資一些麒麟血,做黑暗魔法,如:

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

但是,這感覺hack'ish。

是一樣的東西:

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

可能嗎?

幫助表示讚賞;)

回答

1

如果使用agentOptions強似一個http(s).Agent例如,request會爲你創建一個代理使用的每個方案:

+0

聽起來更像是OP是什麼尋找 – James

+0

不錯,所以限制(如maxSockets等)將適用於「每個方案」的基礎上?並且例如http代理只會忽略「cert」,「key」等選項。 –

+0

@FlorianBarth正確。 – robertklep