簡體   English   中英

node.js簡單代理服務器

[英]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.methodreq.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM