4

我刚刚安装了 Node.js,也许我遗漏了一些东西,但我正在尝试一个简单的 http.request 并且只得到 400 个响应。我已经尝试了几个没有运气的主机。我从他们的站点安装了 Node,这不起作用,所以我通过 Homebrew 卸载并安装并获得相同的“400”输出。我特别想知道是否需要在我的 Mac 上进行更改以允许 Node 发送请求。

OSX 10.8.4 节点 0.10.13 自制 0.9.4

var http = require("http");

var req = http.request({
    host: "http://google.com"
}, function(res){
    if (res.statusCode === 200) console.log(res);
    else console.log(res.statusCode);
});

req.on("error", function(err){
    console.log(err);
});

req.end();

我很感激任何帮助。谢谢!

4

3 回答 3

10

您主机中的 http:// 令人困惑。尝试将其切换到“www.google.com”。这是一个http请求,无需重复:)

于 2013-07-17T03:13:44.567 回答
1

你试过去掉http://你的host参数吗?我经常将这个url实用程序用于这样的事情。它会自动将 url 解析为正确的部分以传递给http.request.

var url = require('url'),
    link = url.parse('http://www.google.com/');

var req = http.request({
    host: link.hostname,
    path: link.path,
    port: link.port
}, function(res){
    if (res.statusCode === 200) console.log(res);
    else console.log(res.statusCode);
});

此外,我会确保捕获错误事件,以防引发错误。从文档:

req.on('error', function(e) {
    console.log('problem with request: ' + e.message);
});

如果您只需要GET回复,您也可以使用http.get。从文档:

http.get("http://www.google.com/index.html", function(res) {
    console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
    console.log("Got error: " + e.message);
});
于 2013-07-17T03:35:57.630 回答
0

就我而言,path参数中缺少前导斜杠

例如,这有效:

http.request({
    host: 'example.com',
    path: '/foo/bar.html',
}, (res) => {...});

但这不起作用(出现错误 400):

http.request({
    host: 'example.com',
    path: 'foo/bar.html',
}, (res) => {...});
于 2021-02-04T18:25:32.800 回答