4

この問題を自分で解決しようとするのにうんざりしています。株式市場の 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」が表示されます。

4

2 に答える 2

0

これは 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

于 2012-09-09T20:47:26.987 に答える
0

新しい Node の例があります: https://api.test.nordnet.se/projects/api/wiki/Code_examples#Login-and-feed-example-in-Nodejs

基本的に、rest を使用してログインしてから、セッション キーを使用してフィードにログインする必要があります。

于 2013-01-15T21:41:58.523 に答える