如何使用NodeJS通过套接字进行HTTP GET请求?

5

我正在使用一种硬件设备(非本人创建)进行工作,该设备有一种标准的方式通过套接字连接与其通信。该设备通过联系我的服务器(涉及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个回答

10

搞定了!感谢@peter-lyons的建议。然而,答案相当简单,我只需要更深入地阅读有关net.Socket类的NodeJS文档。

秘密有两个... 1)在net.Socket的NodeJS文档中,它解释说该类可以用作客户端,并使用Socket.event.connect

2)我需要手动.write 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');
    });

});

... and BOOM


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接