この問題を自分で解決しようとするのにうんざりしています。株式市場の 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");
});
最初はすべてうまくいき、「接続済み」というメッセージが表示されて満足していますが、実際にログインしようとすると、コンソールに「[機能]」と「接続が閉じられました」しか表示されません。ええ、サーバーから来るデータは「[関数]」だけのようです。これはちょっと奇妙です。編集:なぜそれが得られるのかがわかりました。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に変更するか、完全に削除するか、神は私が試したことを知っています.
わかりました...これが私の最終的な試みです。おそらく、おそらく、彼らは本当に認証を必要としており、私はそれを使用していません。ノードの 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 からそのホスト名とポートを取得しますが、進行するにはこれも機能する必要があります。
さて、誰かがこの問題についての洞察を教えてください。3 つのコードのいずれかで改善できる点が見つかった場合は、それを試してみます。
EDIT(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」が表示されます。