http proxy 對網絡請求進行代理使用詳解
正文
使用下面這段簡單的代碼對網絡請求進行代理:
const http = require('http');
const httpProxy = require('http-proxy');
const targetUrl = 'https://www.sap.cn/index.html';
const proxy = httpProxy.createProxyServer({
target: targetUrl,
});
http.createServer(function (req, res) {
proxy.web(req, res);
}).listen(8089);
console.log('Proxy listens in 8089');
這段代碼的語義是,創(chuàng)建一個代理 HTTP 服務器,監(jiān)聽在端口 8089 上。
因此該代理服務器接收到任何發(fā)送到 8089 端口的 HTTP 請求,都會自動將其發(fā)送到 targetUrl 指定的 sap 網站上。
命令行啟動服務器
node server.js
遇到如下錯誤消息:

Error [ERR_TLS_CERT_ALTNAME_INVALID]: Hostname/IP does not match certificate's altnames: Host: localhost. is not in the cert's altnames:
詳細的調用棧
at Object.checkServerIdentity (tls.js:297:12)
at TLSSocket.onConnectSecure (_tls_wrap.js:1507:27)
at TLSSocket.emit (events.js:315:20)
at TLSSocket._finishInit (_tls_wrap.js:932:8)
at TLSWrap.ssl.onhandshakedone (_tls_wrap.js:706:12) {
reason: "Host: localhost. is not in the cert's altnames: DNS:www.sap.cn",
host: 'localhost',
cert: {
subject: [Object: null prototype] {
C: 'DE',
L: 'Walldorf',
O: 'SAP SE',
CN: 'www.sap.cn'
},
當我們使用 SSL 連接到服務器時,服務器所做的第一件事就是提供一個證書,上面寫著 我是 api.dropbox.com。 證書有一個 主題,該主題有一個 CN(Common Name, 通用名稱的縮寫)。證書也可以有一個或多個 subjectAltNames。
當 node.js 連接到服務器時,node.js 會獲取此證書,然后驗證它認為它正在連接的域名 (api.dropbox.com) 是否與主題的 CN 或其中一個替代名稱匹配。
請注意,在 node 0.10.x 中,如果使用 IP 連接,則 IP 地址必須在 altnames 中 - node.js 不會嘗試根據 CN 驗證 IP。
雖然錯誤是關于 SSL 證書和域名不匹配,但是在 http-proxy 模塊中,當您的服務器是 HTTP 并且目標是 HTTPS 時,通常會出現這種錯誤。
到這個開發(fā)包的官網 查找原因。
捕捉錯誤
proxy.on('error', function(e) {
...
});
當一個請求被代理時,它遵循兩個不同的管道,它們將轉換應用于 req 和 res 對象。 第一個管道(傳入)負責創(chuàng)建和操作將客戶端連接到 target 的流。 第二個管道(傳出)負責創(chuàng)建和操作從 target 向客戶端返回數據的流。
在創(chuàng)建時添加 secure:false 選項,問題消失:

以上就是http proxy 對網絡請求進行代理使用詳解的詳細內容,更多關于http proxy 網絡請求代理的資料請關注腳本之家其它相關文章!
相關文章
實現基于飛書webhook監(jiān)聽github代碼提交
這篇文章主要為大家介紹了實現基于飛書webhook監(jiān)聽github代碼提交示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-01-01

