web-dev-qa-db-ja.com

HTTPリクエストでポート番号を指定する(node.js)

リクエストモジュールを使用してHTTPリクエストを行うときにポート番号を指定することは可能ですか?ドキュメントでこれについて何も見ていません:

var request = require('request');

// this works
request({
  method: 'GET',
  url: 'http://example.com'
}, function(error, response, body) {
  if (error) console.log(error);
  console.log(body);
});

// this does not work
request({
  method: 'GET',
  url: 'http://example.com:10080'
}, function(error, response, body) {
  // ...
});

さらに、2番目のバージョンを実行すると、プログラムではまったく何も起こりません(ほとんどリクエストが行われなかったように)。

また、core httpモジュールを使用してリクエストを行うときにポート番号を指定できることも知っています。がリクエストモジュールのオプションではないのはなぜですか?

編集:私は以前にこれを言及したはずですが、私はこのアプリケーションをHerokuで実行しています。

ローカルで(リクエストモジュールを使用して)リクエストを実行すると、ポート番号を指定でき、コールバックが成功します。

Herokuからリクエストを実行すると、コールバックは発生せず、nginxはリクエストのレコードを表示しません。

私は狂っていますか? Herokuが特定のポート番号へのアウトバウンドHTTPリクエストを作成できない理由はありますか?

9
djfdev

最初の引数が完全に機能するように、完全なURLでrequestを使用します。

var http = require('http');
var request = require('request');

// start a test server on some non-standard port
var server = http.createServer(function (req, res) {
  res.end('Hello world');
});
server.listen(1234);

// make the GET request
request('http://127.0.0.1:1234', function (err, res) {
  if (err) return console.error(err.message);

  console.log(res.body);
  // Hello world

  server.close();
});

methodurlを別々に指定することもできます:

request({
  method: 'GET',
  url: 'http://127.0.0.1:1234'
}, function (err, res) {
  if (err) return console.error(err.message);

  console.log(res.body);
  // Hello world

  server.close();
});

サーバーが実行中であり、そのポートでのアクセスを妨げるプロキシまたはファイアウォールの背後にいないことを確認する必要がある場合があります。

7
Robin Murphy

私は質問が要求モジュールを要求することを理解していますが、より一般的なコンテキストでは、httpモジュールを使用している場合は、portキー docs を使用できます。

例えば.

http.get({
    Host: 'example.com', 
    path: '/some/path/',
    port: 8080
}, function(resp){
    resp.on('data', function(d){
        console.log('data: ' + d)
    })
    resp.on('end', function(){
        console.log('** done **')
    })
}).on('error', function(err){
    console.log('error ' + err)
})
2
Mauro Moreno