Продолжайте получать неверный запрос от HTTP.request в Node.js

Я только что установил 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();

Я ценю любую помощь. Спасибо!


person Josh R    schedule 17.07.2013    source источник


Ответы (3)


http:// на вашем хосте сбивает с толку. Попробуйте переключить его на "www.google.com". Это http-запрос, не нужно повторяться :)

person Russbear    schedule 17.07.2013
comment
Ага, это было! Должно быть, вы поняли это из плохого примера. Большое спасибо! - person Josh R; 17.07.2013
comment
@JoshR, вы должны отметить это как принятый ответ (нажав зеленую галочку), если он вам помог. - person Brad; 17.07.2013

Вы пытались убрать 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);
});
person Isaac Suttell    schedule 17.07.2013
comment
Я опоздал на вечеринку, но утилита «url» избавила меня от многих хлопот, хотя я уже знал, что нужно удалить бит «http://». - person MappaGnosis; 08.12.2015

В моем случае в параметре path отсутствовала косая черта.

Например, это работает:

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

Но это НЕ РАБОТАЕТ (получение ошибки 400):

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