繁体   English   中英

与node.js的SSL连接

[英]SSL connection with node.js

我已经厌倦了尝试自己解决这个问题。 我正试图让股市api工作,为此,我需要一个ssl连接。 我得到的只是错误或奇怪的东西。

当我通过使用普通节点的“net”模块连接到套接字时,如下所示:

var net = require('net');
var data = '';
var login = '{"cmd":"login", "args":{"session_key":"' + session_key + '", "service":"NEXTAPI"}} \n';
var socket = new net.Socket();
socket.connect(443, 'pub.api.test.nordnet.se', function () {
    console.log('Connected');
});
socket.on('data', function (stuff) {
    console.log(stuff.toString);
    data += stuff;
});
socket.on('end', function () {
    console.log(data);
});
socket.on('error', function (e) {
    throw e;
});
socket.on('close', function () {
    console.log('Connection closed.');
    console.log(data.toString);
});
socket.write(login , function () {
    console.log("Callback");
});

首先一切都很顺利,我收到“已连接”消息,我很高兴,但是当我尝试进行实际登录时,我到达我的控制台的所有内容都是“[功能]”然后“连接已关闭”。 是的,似乎来自服务器的数据只是“[功能]”。 这有点奇怪。 编辑:现在我知道为什么我得到它,谢谢Amberlamps。 虽然问题仍然存在。

好的,所以我用其他一些方法尝试了同样的事情。 这是我使用socket.io-client的代码。

var client = io_client.connect('https://pub.test.api.nordnet.se:443', {secure: true});
client.on('data', function (stuff) {
    console.log (stuff);
});
client.on('error', function (e) {
    throw e;
});
client.on('end', function () {
    console.log('Connection ended');
});

而我得到的只是“错误:getaddrinfo ENOENT”。 这似乎是同样的错误,无论我尝试用它做什么,将主机名更改为skittles或将https更改为http或完全删除它,或者上帝知道我尝试了什么。

好的......这是我的最终尝试,我可能,也许,只是也许,他们确实需要认证,我没有使用它。 所以这是我使用node的tls模块的另一段代码:

var tls = require ('tls');
var fs = require ('fs');

var options = {
host: 'pub.api.test.nordnet.se',
port: '443',
key: fs.readFileSync('NEXTAPI_TEST_public.pem'),
cert: fs.readFileSync('NEXTAPI_TEST_public.der')
};

var Stream = tls.connect(options, function () {
    console.log('client connected', Stream.authorized ? 'authorized' : 'unauthorized');
    process.stdin.pipe(Stream);
    process.stdin.resume();
});
Stream.on('data', function (stuff) {
    console.log(stuff);
});
Stream.on('end', function () {
    console.log('END');
});
Stream.on('error', function (err) {
    throw err;
});

但它甚至没有进入认证部分,它给我的全部是“错误:连接EADDRNOTAVAIL”。 我再次尝试将名称,端口,https更改为hppt等,但我得到的是同样的错误。 哦,你可能会认为我的主机名中只有一个错误,但是没有,我使用不同的技术从同一个api获取主机名和端口,但是我需要这个也是为了进步。

现在请,有人给我一些关于这个问题的见解。 如果您发现任何我可以改进的三个代码中的任何一个,我会尝试这样做。

编辑(1):如果我尝试使用普通的https而不是套接字,会发生什么。

var https = require ('https'); 
var options = {
host: 'pub.api.test.nordnet.se',
path: '/',
port: '443', 
auth: session_key + ':' + session_key, // Tried with and without this.
headers: {"Accept": "application/json", "Connection": "Keep-Alive"}
};

var request = https.get(options, function (res) {
    res.on('data', function (stuff) {
        console.log(stuff)
    });
    res.on('end', function () {
        console.log("END");
    });
})
.on('error', function (e) {
    throw e;
});

我得到的只是“错误:套接字挂断”。 或者,如果我指定https://pub.api ...我得到“错误:getaddrinfo ENOENT”。

由于这是一个REST API,因此使用https模块的尝试是正确的。 但是,根据文档,您应该尝试连接到“https://api.test.nordnet.se/next/1”。 '1'是API版本。 这应该解释ENOENT /连接重置。

查询这将返回api状态。 下一步是登录。

我在这里找到了一个非常好的Python示例: https//api.test.nordnet.se/boards/2/topics/297?r = 340 #message-340

有一个新的Node示例: https//api.test.nordnet.se/projects/api/wiki/Code_examples#Login-and-feed-example-in-Nodejs

您基本上需要使用rest登录,然后使用会话密钥登录到Feed。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM