【问题标题】:how to forward http request in node js如何在节点js中转发http请求
【发布时间】:2016-03-14 14:13:58
【问题描述】:

我想接受一个请求,将它转发到另一个 url 并返回转发请求的结果。

这是我的代码:

const http = require('http'),
      server = http.createServer().listen(3000);

const baseUrl = 'foo.bar';

server.on('request', (req, res) => {
    req.headers.host = baseUrl;

    var connector = http.request(req, (resp) => {
        resp.pipe(res);
    });

    req.pipe(connector);
});

很遗憾,我遇到了一个错误,即套接字挂断了。

Error: socket hang up
    at createHangUpError (_http_client.js:203:15)
    at Socket.socketOnEnd (_http_client.js:288:23)
    at emitNone (events.js:72:20)
    at Socket.emit (events.js:166:7)
    at endReadableNT (_stream_readable.js:903:12)
    at doNTCallback2 (node.js:439:9)
    at process._tickCallback (node.js:353:17)

有谁知道,我做错了什么?

【问题讨论】:

    标签: node.js http pipe


    【解决方案1】:

    尝试手动配置新的请求对象,不要更改req对象。

    这行得通:

    const http = require('http'),
        server = http.createServer().listen(3000);
    
    const baseUrl = 'www.i.ua';
    
    server.on('request', (req, res) => {
      var connector = http.request({
        host: baseUrl,
        path:'/',
        method: 'GET',
        headers: req.headers
      }, (resp) => {
        resp.pipe(res);
      });
    
      req.pipe(connector);
    });
    

    所以,你应该有这样的东西:

    const http = require('http'),
        server = http.createServer().listen(3000);
    
    const baseUrl = 'radio.i.ua';
    
    server.on('request', (req, res) => {
      var connector = http.request({
        host: baseUrl,
        path: req.url,
        method: req.method,
        headers: req.headers
      }, (resp) => {
        resp.pipe(res);
      });
    
      req.pipe(connector);
    });
    

    【讨论】:

    • 一直试图让它工作但没有成功的身份验证标头:(
    • 只需将headers 部分添加到http.request。 http.request({headers: req.headers})
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2017-08-14
    相关资源
    最近更新 更多