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

时间:2013-08-28 20:37:34

标签: node.js sockets http get

我正在使用硬件设备(我没有创建),它具有通过套接字连接与之通信的标准方法。设备通过联系我的服务器(相关的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
});

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

我希望的是像http这样的类允许你做类似的事情......

http.get(socket, function(res){  // Handler code  })

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

2 个答案:

答案 0 :(得分:6)

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

秘密是双重的...... 1)在net.Socket的NodeJS文档中,它解释了该类可以用作 Socket.event.connect 的客户端。

2)我需要手动 .write HTTP GET。 This post帮我解答了答案。

我是这样做的。请随意评论这种方法。

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');
    });

});

...和BOOM

答案 1 :(得分:0)

我的第一个想法是:

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