我必须使用自定义方法名STATS
,nodejs http模块不支持。
所以,我决定使用tcp socket:
feed.socket = net.createConnection(config.port, config.host);
feed.socket.on('connect', function() {
feed.socket.write(
'STATS / HTTP/1.1\r\n' +
'Authorization: Basic ' + new Buffer(config.user + ':' + config.password).toString('base64') + '\r\n' +
'User-Agent: custom-http-client/0.0.1\r\n' +
'Host: ' + config.host + '\r\n' +
'Accept: */*\r\n\r\n'
);
});
feed.socket.on('data', function(chunk) {
console.log(chunk.toString());
});
执行连接后,服务器发送标题&然后开始通过持久连接发送数据块:
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Wed, 07 Oct 2015 13:23:54 GMT
Transfer-Encoding: chunked
Connection: keep-alive
Capability: streamlist stats
1fcf // data size
...DATA...
我可以检测并忽略标题,我可以连接来自不同块的字符串行,但是手动处理数据大小非常复杂,它们是以块的形式发送的。
也许有一个解决方案,可以处理标题,分块编码数据和返回逐行数据?