2012-06-16 68 views
6

Tôi là người mới sử dụng node.js, nhưng tôi muốn chơi xung quanh với một số mã cơ bản và thực hiện một vài yêu cầu. Tại thời điểm này, tôi đang chơi xung quanh với việc tìm kiếm OCW (http://www.ocwsearch.com/), và tôi đang cố gắng để thực hiện một vài yêu cầu cơ bản sử dụng mẫu yêu cầu tìm kiếm của họ:Yêu cầu Node.js trả lại 301 chuyển hướng

Tuy nhiên, không có vấn đề gì yêu cầu tôi cố gắng thực hiện (thậm chí nếu tôi chỉ cần truy vấn google.com), nó trở về tôi

<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> 

tôi không quá chắc chắn những gì đang xảy ra. Tôi đã tra cứu nginx, nhưng hầu hết các câu hỏi được hỏi về nó dường như được hỏi bởi những người đã thiết lập máy chủ của riêng họ. Tôi đã thử sử dụng một yêu cầu https thay vào đó, nhưng nó trả về một lỗi 'ENOTFOUND'.

Mã của tôi dưới đây:

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/'); 

Xin lỗi nếu điều này là một câu hỏi thực sự đơn giản, và nhờ sự giúp đỡ nào bạn có thể cho!

+0

Đó là toàn bộ rất nhiều $. – Krinkle

Trả lời

5

Vấn đề là mô-đun yêu cầu HTTP của Node.JS không tuân theo chuyển hướng bạn được cung cấp.

Xem câu hỏi này để biết thêm: How do you follow an HTTP Redirect in Node.js?

Về cơ bản, bạn có thể xem xét thông qua các tiêu đề và xử lý các chuyển hướng chính mình, hoặc sử dụng một trong những số ít các module cho việc này. Tôi đã sử dụng thư viện "yêu cầu" và đã tự mình may mắn. https://github.com/mikeal/request

+0

Cảm ơn bạn rất nhiều vì đã trả lời nhanh! Tôi sẽ xem thử. – dxu

+0

Điều gì sẽ xảy ra với $ 's ở trên, là những ý định? – jcolebrand

+0

@jcolebrand, Họ trông giống như ông đã sao chép và dán từ trình soạn thảo của mình. Họ dường như chỉ ra các ký tự kết thúc. – 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

vậy tại sao 'res.statusCode == 301' vào thời điểm này và ở đâu là' i' và obfuscator bạn đã sử dụng để tạo mã này: P –

+0

oh, 'f' là đệ quy; àla line ~ 12 ... LOL –

+0

Nhập chức năng i mà chắc chắn không làm cho nó ít khó hiểu .... và đối với wow obfuscater Tôi không nhớ bằng văn bản này tôi phải có được sở hữu. – Prospero

1

Câu hỏi này là cũ bây giờ, nhưng tôi có cùng lỗi 301 và những câu trả lời không thực sự giúp tôi giải quyết vấn đề.

Tôi đã viết code giống nhau:

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(); 

nên sau một thời gian tôi nhận ra rằng có một sai lầm thực sự nhỏ bé trong mã này đó là hostname phần:

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

bạn phải thêm "www . " trước URL của bạn để nhận nội dung html, nếu không sẽ có lỗi 301.

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

Phản hồi 301 không phải là lỗi, đó là chuyển hướng vĩnh viễn và cơ sở cốt lõi của câu hỏi của người này. Trang web được chuyển hướng với một phản hồi http 301 và http node.js không theo các chuyển hướng, bạn phải viết mã cho điều đó hoặc sử dụng một trong nhiều mô-đun sẽ làm điều đó cho bạn. – Brettski