使用请求模块进行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) {
// ...
});
此外,当我运行第二个版本时,我的程序中绝对没有任何反应(几乎就像从未提出请求一样)。
我也知道我可以在使用核心http
模块发出请求时指定端口号。为什么请求模块中没有选项?
编辑:我之前应该提到过这个问题,但是我在Heroku上运行这个应用程序。
当我在本地运行请求时(使用请求模块),我可以指定端口号,并获得成功的回调。
当我从Heroku运行请求时,没有触发回调,并且nginx没有显示请求的记录。
我疯了吗?是否有某些原因Heroku阻止我向特定端口号发出出站HTTP请求?答案 0 :(得分:7)
使用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();
});
分别指定method
和url
也有效:
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();
});
您可能想要检查您的服务器是否正在运行,以及您是否在代理或防火墙后面阻止访问该端口。
答案 1 :(得分:1)