11

私は node.js を初めて使用しますが、いくつかの基本的なコードをいじって、いくつかのリクエストを行いたいと思っていました。現時点では、OCW 検索 ( http://www.ocwsearch.com/ ) をいじっており、サンプルの検索要求を使用していくつかの基本的な要求を作成しようとしています。

ただし、どのようなリクエストをしようとしても(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/');

これが非常に単純な質問である場合は申し訳ありません。あなたができる助けに感謝します!

4

4 に答える 4

7

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

詳細については、この質問を参照してください: Node.js で HTTP リダイレクトをどのようにフォローしますか?

基本的に、ヘッダーを調べて自分でリダイレクトを処理するか、少数のモジュールの 1 つを使用することができます。私は「リクエスト」ライブラリを使用してきましたが、自分自身でうまくいきました。 https://github.com/mikeal/request

于 2012-06-16T05:39:15.850 に答える
5
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}) )
}
于 2012-07-29T10:25:28.873 に答える
3

この質問は古いものですが、同じ 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」を追加する必要があります。html コンテンツを取得する URL の前に追加しないと、301 エラーが発生します。

var options = {
     hostname: 'www.google.com',
于 2017-03-11T11:02:17.170 に答える