2011-07-30 5 views
8

Im écrire un client http lire de facebook en utilisant Node.js et en utilisant le code suivant:problème avec HTTP GET demande de noeud

var http = require('http'); 

var options = { 
    host: 'www.fb.com', 
    path: '/', 
    "user-agent": "node.js" 
}; 

http.get(options, function(res) { 
    console.log("Got response: " + res.statusCode); 
    console.log(res.headers); 
}).on('error', function(e) { 
console.log("Got error: " + e.message); 
}); 

Dans mon navigateur, cela renvoie une redirection 301 avec l'emplacement www.facebook.com, cependant dans node.js j'obtiens une réponse 302 avec un emplacement de www.fb.com/common/browser.php. Je l'ai essayé avec la dernière version du noeud et il jette toujours cette erreur.

J'apprécierais vraiment de l'aide avec ceci, Merci.

+1

J'ai réalisé quel est le problème .. Je n'utilisais pas le http.client pour faire la demande. Je suppose que le client gère la réponse keepalive et les cookies et les résout. HTTP GET envoie une nouvelle requête à chaque fois et l'état n'est pas maintenu entre les requêtes. Donc, fb.com doit faire quelque chose comme, si cookie ne pas rediriger vers fb.com et définir le cookie. Je pourrais avoir besoin de plus d'éclaircissement ici. Mais moral de l'histoire ... utilisez http.client pour faire des demandes. Vous obtiendrez le bon comportement – user868459

Répondre

3

Ce dosent semble être un bug de node.js J'ai fait une demande à fb.com en curl et j'ai eu la même redirection.

Il fait sans doute cette décision en fonction de l'agent utilisateur ... peut-être vous pouvez utiliser l'agent utilisateur d'un navigateur: D

26
var request_options = 
{ 
    host: 'www.fb.com', 
    headers: {'user-agent': 'Mozilla/5.0'}, 
    path: '/' 
}; 

Définition de l'option de demande de cette façon devrait fonctionner.

Questions connexes