2017-02-08 13 views
0

自分のLAN上でアクセス可能な組み込みデバイス用に開発中です。私は私の開発環境が含まれているDockerコンテナの内部からそのAPIへのリクエストを作成したいと考えています。DockerコンテナからLAN IPへのHTTPSリクエストは失敗しますが、カールはうまくいきます。

デバイスはhttps://172.16.1.92で公開されています(もちろん、適切なHTTPS証明書はありません)。私は正常に私のブラウザでこのURLを訪問することができ、すべてが正常に動作します。

私が実行している場合は、この:

docker run -it --rm node:5 curl --insecure https://172.16.1.92/api 

私が期待される結果(JSONオブジェクト)を参照してください。

はしかし、迅速なJSのテストスクリプト書いた後:

var https = require('https'); 

https.request({ 
    host: '172.16.1.92', 
    method: 'GET', 
    path: '/api', 
    timeout: 5 * 1000, 
    rejectUnauthorized: false, // for the lack of certificate 
}, function(res) { 
    console.log(res.statusCode); 
}); 

そして、それを実行している:

docker run -it --rm -v `pwd`:/code -w /code node:5 node test.js 

を私は数秒後にこのエラーが出る:

events.js:141 
     throw er; // Unhandled 'error' event 
    ^

Error: socket hang up 
    at createHangUpError (_http_client.js:206:15) 
    at TLSSocket.socketOnEnd (_http_client.js:298:23) 
    at emitNone (events.js:72:20) 
    at TLSSocket.emit (events.js:166:7) 
    at endReadableNT (_stream_readable.js:905:12) 
    at nextTickCallbackWith2Args (node.js:474:9) 
    at process._tickCallback (node.js:388:17) 

私は混乱 - curlを使用してURLの細かい部分にアクセスできますが、ノードのhttpsライブラリを使用していないのはなぜですか?私は私のホスト上でnmap -sP 172.16.1.*を実行する場合


は、私はこの行を参照してください。

Nmap scan report for WRN_002258.lan (172.16.1.92) 
Host is up (0.0011s latency). 
MAC Address: xx:xx:xx:xx:xx:xx (vendor) 

をしかし、私はドッカーコンテナ内nmapをインストールして、同じコマンドを実行した場合、私はこの代わりに、以下を参照してください。

Nmap scan report for 172.16.1.92 
Host is up (0.0032s latency). 

それは重要ですか?

答えて

1

あなたのコードは、HTTPサーバーとのTCPハンドシェイクを実行しますが、それ以上のデータは送信しません。

にあなたのNode.jsのコードを変更します。あなたはhttp.request()ためhttps.request()とドキュメントのドキュメントをお読みください

var https = require('https'); 

var req = https.request({ 
    host: '172.16.1.92', 
    method: 'GET', 
    path: '/api', 
    timeout: 5 * 1000, 
    rejectUnauthorized: false, // for the lack of certificate 
}, function(res) { 
    console.log(res.statusCode); 
}); 

req.end() 

。これを行うと、request.end()

TLの場合、DRの瞬間:request.end()の要求の送信が完了します。

+0

うわー、それは本当に私のことわざだった。私は常にrequest()がリクエストを作成することを忘れています。辛抱強く答えてくれてありがとう! –

関連する問題