与node.js的SSL连接
SSL connection with node.js
我已经厌倦了独自解决这个问题。我正试图让一个股市api正常工作,为此,我需要一个ssl连接。唉,我得到的只是错误或一些奇怪的东西。
当我只使用普通节点的"网络"模块连接到插座时,如下所示:
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");
});
首先,一切都很好,我收到了"已连接"的消息,我很高兴,但当我尝试进行实际登录时,我在控制台上得到的只是"[功能]",然后是"连接关闭"。是的,似乎来自服务器的数据只是"[函数]"。这有点奇怪。编辑:现在我知道我为什么得到它了,谢谢安伯兰普。尽管问题依然存在。
好吧,所以我尝试了同样的方法和其他一些方法。这是我使用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,或者完全删除它,这似乎都是同样的错误,天知道我试过什么。
好吧。。。这是我的最后一次尝试,我想也许,只是也许,他们真的需要证书,而我没有使用过。所以这是我使用节点的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"。
由于这是一个RESTapi,尝试使用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-和Nodejs 中的提要示例
您基本上需要使用rest登录,然后使用会话密钥登录到提要。
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 如何使用密码检测网络中的状态连接
- 如何处理node.js节点mongodb中的连接和查询队列
- Rails-JQueryUIAutcomplete和AJAX不工作,可以't连接到数据库
- Twilio-显示所有连接参与者的远程参与者视频
- 操作放置在画布上的元素之间的连接
- TypeError:_this.store.getState在使用来自Redux的连接时不是函数
- JavaScript和Java WebSocket SSL连接错误
- 通过SSL/TLS连接访问Vagrant上的Node.js应用程序
- Phantomjs 与 Facebook 的连接无法通过 SSL 握手
- 与node.js的SSL连接
- 如何通过ssl、https Node.js进行连接
- C/SSL/JQuery.ajax() 客户端 - >服务器连接重置,但发送了 1 个字节
- webRTC是否像非SSL连接上的webSockets一样掉线
- JavaScript中的SSL连接
- SSL连接上的XMLHTTPRequest
- 内容文件返回“;“空”;在SSL连接上
- 当代理服务器*始终*声明安全连接时检测SSL
- 当使用 SSL 连接失败时,是否有任何浏览器在没有 SSL 的情况下连接
- 服务器到服务器套接字的SSL加密.输入输出连接