如何使用NodeJS在套接字上发出HTTP GET请求?

iDV*_*DVB 2 sockets get http node.js

我正在使用硬件设备(我没有创建),它具有通过套接字连接与之通信的标准方法.设备通过联系我的服务器(相关的NodeJS服务器)启动套接字连接.

我成功地设置了与...的套接字连接

var socketServer = net.createServer()
.listen(9999, function(){
        console.log('SOCKET Listening at: http://localhost:9999');
});

socketServer.on('connection', function(sock) {
    console.log('CONNECTED: ' + sock.remoteAddress +':'+ sock.remotePort);
    console.log(sock);
    // Need to fire HTTP GET HERE
});
Run Code Online (Sandbox Code Playgroud)

但是,我现在需要通过该套接字连接发送HTTP GET请求.到目前为止,我能弄清楚如何做到这一点的唯一方法是手动 socket.write我自己写.

我希望的是一些像http这样的课程可以让你做类似...

http.get(socket, function(res){  // Handler code  })
Run Code Online (Sandbox Code Playgroud)

我几乎肯定这个问题对我来说是NodeJS的新手,所以我花了大约3-4个小时来搜索stackoverflow和谷歌寻找答案,迄今为止没有成功.

iDV*_*DVB 6

弄清楚了!感谢@ peter-lyons提出的建议.但是,答案很简单,我只需要进一步阅读net.Socket类的NodeJS文档.

这个秘密有两个...... 1)在NodeJS docs for net.Socket中解释说该类可以用作Socket.event.connect的客户端.

2)我需要手动编写 HTTP GET.这篇文章帮助我找到答案.

我就是这样做的.请随意评论此方法.

var socketServer = net.createServer()
.listen(9999, function(){
        console.log('SOCKET SERVER Listening at: http://localhost:9999');
});

socketServer.on('connection', function(socket) {
    console.log('SERVER CONNECTED: ' + socket.remoteAddress +':'+ socket.remotePort);

    socket.on('data', function(data) {
        console.log('SOCKET RESPONSE: ' + data);
    }).on('connect', function() {
        socket.write("GET /rest/whoami HTTP/1.1\r\n\r\n");
        console.log('SOCKET GET REQUEST SEND');
    }).on('end', function() {
        console.log('SOCKET ENDED');
    });

});
Run Code Online (Sandbox Code Playgroud)

......和BOOM


Pet*_*ons 0

我的第一个想法是:

不知道这是否真的有效,但似乎值得尝试。