gpt4 book ai didi

javascript - Node.js 简单代理服务器

转载 作者:太空宇宙 更新时间:2023-11-04 03:10:23 25 4
gpt4 key购买 nike

我正在尝试在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。这意味着您应该向其中添加协议(protocol)和域名:

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,那么看看this article with example proxy server implementation 。文章作者使用内置的http模块来发送请求,而不是更强大的request module并且不使用管道,但文章的其余部分看起来不错。

至于你的第一个问题,Piotr Tomasik's answer should help you .

关于javascript - Node.js 简单代理服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22892201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com