[英]node.js simple proxy server
我正在嘗試在nodejs中實現簡單的匿名http代理服務器
var http = require('http'),
request = require('request');
http.createServer(function(req,res){
req.pipe(request(req.url)).pipe(res)
}).listen(8888)
我收到以下錯誤:
stream.js:94
throw er; // Unhandled stream error in pipe.
^
Error: CERT_HAS_EXPIRED
at SecurePair.<anonymous> (tls.js:1370:32)
at SecurePair.EventEmitter.emit (events.js:92:17)
at SecurePair.maybeInitFinished (tls.js:982:10)
at CleartextStream.read [as _read] (tls.js:469:13)
at CleartextStream.Readable.read (_stream_readable.js:320:10)
at EncryptedStream.write [as _write] (tls.js:366:25)
at doWrite (_stream_writable.js:226:10)
at writeOrBuffer (_stream_writable.js:216:5)
at EncryptedStream.Writable.write (_stream_writable.js:183:11)
at write (_stream_readable.js:583:24)
at flow (_stream_readable.js:592:7)
at Socket.pipeOnReadable (_stream_readable.js:624:5)
這是另一個錯誤:
events.js:72
throw er; // Unhandled 'error' event
^
Error: Invalid protocol
有什么建議么?
req.url
是相對路徑,而不是完整URL。 這意味着您應該為其添加協議和域名:
req.pipe(request('http://mydomain.com'+req.url)).pipe(res)
您還忘記了req.method
和req.headers
:
req.pipe(request({
url: 'http://mydomain.com'+req.url,
method: req.method,
headers: req.headers
})).pipe(res)
如果您的目的是將其用作真正的代理服務器,那么我建議您查看node-http- proxy-這是一個完美的node.js代理服務器實現。
如果您只想學習node.js,請參閱本文的示例代理服務器實現 。 本文的作者使用內置的http
模塊發送請求,而不是使用更強大的request
模塊,並且不使用管道,但是本文的其余部分看起來還不錯。
至於您的第一個問題, 皮奧特·托馬西克(Piotr Tomasik)的回答應該會對您有所幫助 。
您所擊中的域似乎具有過期的證書。
將此添加到文件的頂部。
process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
至於第二個錯誤,請確保該URL包含協議。 http
https
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.