首页 > 解决方案 > 如何读取带有节点的子路径中的原始 HTTP 响应?

问题描述

我正在尝试使用节点获取格式错误的 HTTP 响应。由于响应格式错误,我无法request正常使用(它会给出HPE_INVALID_CONSTANT错误)

从这个答案https://stackoverflow.com/a/23543522/1748450net我可以使用模块获取原始 HTTP 响应,如下所示:

var net = require('net');

var host = '192.168.1.1',
    port = 80,
    socket = net.connect(port, host, function() {

    var request = "GET / HTTP/1.1\r\nHost: " + host + "\r\n\r\n",
        rawResponse = "";

    // send http request:
    socket.end(request);

    // assume utf-8 encoding:
    socket.setEncoding('utf-8');

    // collect raw http message:
    socket.on('data', function(chunk) {
        rawResponse += chunk;
    });
    socket.on('end', function(){
        console.log(rawResponse);
    });
});

但是,这仅适用于从主机的根页面 ( 192.168.1.1) 获取响应。我试图从中获得响应的页面实际上是192.168.1.1/admin/landingpage.fwd.

如果我尝试编辑host该 URL,则会收到此错误:

events.js:187
      throw er; // Unhandled 'error' event
      ^

Error: getaddrinfo ENOTFOUND 192.168.1.1/admin/landingpage.fwd
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:60:26)
Emitted 'error' event on Socket instance at:
    at emitErrorNT (internal/streams/destroy.js:92:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:60:3)
    at processTicksAndRejections (internal/process/task_queues.js:80:21) {
  errno: 'ENOTFOUND',
  code: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: '192.168.1.1/admin/landingpage.fwd'
}

这可以使用net上面示例中的模块来获取吗?

如果不可能,我可以使用什么其他方式从该 URL 获取原始 HTTP 响应?

标签: node.js

解决方案


您可以将路径放在您的 http 请求中,如下所示:

var request = "GET /admin/landingpage.fwd HTTP/1.1\r\nHost: " + host + "\r\n\r\n",? 

这就是http请求中路径的位置。


推荐阅读