2012-06-16 21 views
6

私はnode.jsの新機能ですが、いくつかの基本的なコードを使い、いくつかのリクエストをしてみたかったのです。現時点では、私はOCW検索(http://www.ocwsearch.com/)で遊んでいますが、サンプル検索リクエストを使用していくつかの基本的なリクエストを行っています:Node.js 301のリダイレクトを返すリクエスト

しかし、私はちょうど)google.comを照会すると、私が何が起こっているのかあまりわからないんだけど、私

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

に戻っています。私はnginxを見てきましたが、ほとんどの質問は、自分のサーバーを設定していた人たちから聞かれるように思えました。代わりにhttps要求を使用しようとしましたが、エラー 'ENOTFOUND'を返します。以下

マイコード:あなたが与えることができる任意の助け

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

これは本当に簡単な質問であれば申し訳ありません、と感謝!

+0

これは非常に多くの$です。 – Krinkle

答えて

5

問題は、Node.JSのHTTPリクエストモジュールが指定されたリダイレクトに従っていないことです。

は、より多くのために、この質問を参照してください: How do you follow an HTTP Redirect in Node.js?

基本的に、あなたはヘッダを見て、自分自身をリダイレクトするか、このためのモジュールの一握りのいずれかを使用扱うことができます。私は "リクエスト"ライブラリを使用しており、自分自身で幸運を祈っています。 https://github.com/mikeal/request

+0

すぐにお返事ありがとうございました!私は見てみましょう。 – dxu

+0

上記の$はどうなっていますか?意図的ですか? – jcolebrand

+0

@jcolebrand、彼らは彼がエディタからコピーして貼り付けたように見えます。彼らは行末の文字を示すようです。 – 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

なので、なぜこの時点で 'res.statusCode == 301'となるのでしょうか?' i'はどこにあり、このコードを生成するためにobfuscatorを使用しましたか?P –

+0

ああ、 'f'は再帰的です。 àla〜〜12 ... LOL –

+0

i関数を追加して、あまり混乱させないようにしました....そしてobfuscater wowに関しては、これを書くのを忘れてしまいました。 – Prospero

1

この質問は今古いですが、私は同じ301エラーを持って、これらの答えは、実際に私が問題を解決する助けにはなりませんでした。

私は同じコードを書いた:

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

ので、私は、ホスト名の一部であるこのコードでは本当に小さな間違いがあることを実現し、いくつかの時間後:

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

あなたが「WWWを追加する必要があります"あなたのURLの前にHTMLコンテンツを取得してください。それ以外の場合は301エラーが発生します。

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

301レスポンスはエラーではありません。これは永続的なリダイレクトであり、この人の質問の中核です。 http 301レスポンスとnode.js httpでリダイレクトされたサイトはリダイレクトに従わず、それをコーディングするか、それを行うための多くのモジュールの1つを使用する必要があります。 – Brettski