2012-06-16 28 views
6

Soy nuevo en node.js, pero quería jugar con algunos códigos básicos y realizar algunas solicitudes. Por el momento, estoy jugando con la búsqueda OCW (http://www.ocwsearch.com/), y estoy tratando de hacer algunas solicitudes básicas utilizando su solicitud de búsqueda de muestra:Solicitudes Node.js devolviendo redirecciones 301

Sin embargo, no importa qué solicitud intente hacer (incluso si acabo de consultar google.com), me está devolviendo

<html> 
<head><title>301 Moved Permanently</title></head> 
<body bgcolor="white"> 
<center><h1>301 Moved Permanently</h1></center> 
<hr><center>nginx/0.7.65</center> 
</body> 
</html> 

No estoy muy seguro de lo que está pasando. Busqué nginx, pero la mayoría de las preguntas que se hicieron al respecto parecían ser preguntadas por personas que estaban configurando sus propios servidores. Intenté utilizar una solicitud https en su lugar, pero eso devuelve un error 'ENOTFOUND'.

Mi código de abajo:

var http = require('http'); 

http.createServer(function (request, response) { 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 
    response.end('Hello World\n'); 

    var options = { 
     host:'ocwsearch.com', 
     path: 
     '/api/v1/search.json?q=statistics&contact=http%3a%2f%2fwww.ocwsearch.com%2fabout/', 
     method: 'GET' 
    } 


    var req = http.request(options, function(res) { 
     console.log("statusCode: ", res.statusCode); 
     console.log("headers: ", res.headers); 
     res.on('data', function(d) { 
      process.stdout.write(d); 
     }); 
    }); 
    req.end(); 

    req.on('error', function(e) { 
     console.error(e); 
    }); 


}).listen(8124); 

console.log('Server running at http://127.0.0.1:8124/'); 

Lo siento si esto es una pregunta muy simple, y gracias por cualquier ayuda que puede dar!

+0

Eso es un montón de $. – Krinkle

Respuesta

5

El problema es que el módulo de solicitud de HTTP de Node.JS no sigue la redirección que se le ha asignado.

Ver esta cuestión para más: How do you follow an HTTP Redirect in Node.js?

Básicamente, puede mirar a través de las cabeceras y manejar el mismo redirigir o utilice uno de los pocos módulos para esto. He usado la biblioteca de "solicitud" y he tenido suerte con ella. https://github.com/mikeal/request

+0

¡Muchas gracias por la rápida respuesta! Le echaré un vistazo. – dxu

+0

¿Qué pasa con los $ de arriba, son esos intencionales? – jcolebrand

+0

@jcolebrand, parece que copió y pegó de su editor. Parecen indicar caracteres de final de línea. – Brad

3
var http = require('http'); 

var find_link = function(link, callback){ 

    var root =''; 

    var f = function(link){ 

    http.get(link, function(res) { 

     if (res.statusCode == 301) { 
     f(res.headers.location); 
     } else { 
     callback(link); 
     } 

    }); 
} 

    f(link, function(t){i(t,'*')}); 
} 

find_link('http://somelink.com/mJLsASAK',function(link){ 
    console.log(link); 
}); 

function i(data){ 
    console.log(require('util').inspect(data,{depth:null,colors:true})) 
} 
+0

entonces, ¿por qué 'res.statusCode == 301' en este punto y dónde está' i' y qué ofuscador usaste para generar este código: P –

+0

oh, 'f' es recursivo; àla línea ~ 12 ... LOL –

+0

Agregué la función i que seguro no lo hace menos confuso ... y en cuanto al obfuscater wow, no recuerdo haber escrito esto, debo haber sido poseído. – Prospero

1

Esta pregunta es viejo ahora, pero tengo el mismo error 301 y estas respuestas en realidad no me ayudan a resolver el problema.

que escribió el mismo código:

var options = { 
    hostname: 'google.com', 
    port: 80, 
    path: '/', 
    method: 'GET', 
    headers: { 
     'Content-Type': 'text/plain', 
    } 
}; 

var http = require('http'); 

var req = http.request(options, function(res) { 
    console.log('STATUS:',res.statusCode); 
    console.log('HEADERS: ', JSON.stringify(res.headers)); 
    res.setEncoding('utf8'); 

    res.on('data', function(chunk) { 
     console.log(chunk); 
    }); 
    res.on('end', function() { 
     console.log('No more data in response.'); 
    }); 
}); 

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

req.end(); 

así que después de un tiempo me di cuenta de que hay un muy pequeño error en el código que forma parte el nombre de host:

var options = { 
    hostname: 'google.com', 
    ... 

hay que añadir "www " antes de su URL para obtener contenido html; de lo contrario, habría un error 301.

var options = { 
    hostname: 'www.google.com', 
+1

Una respuesta 301 no es un error, es una redirección permanente y la base central de la pregunta de esta persona. El sitio redirigido con una respuesta http 301 y node.js http no sigue los redireccionamientos, debe codificar para eso o usar uno de los muchos módulos que lo harán por usted. – Brettski

Cuestiones relacionadas