ホームページ  >  記事  >  ウェブフロントエンド  >  HTTP プロトコル要求を処理するための Node.js の Request モジュールの使用方法の概要

HTTP プロトコル要求を処理するための Node.js の Request モジュールの使用方法の概要

不言
不言オリジナル
2018-06-30 14:44:171565ブラウズ

この記事では、HTTP リクエストを処理するための Node.js の Request モジュールの基本的な使用方法のチュートリアルを主に紹介します。リクエストは OAuth 署名リクエストもサポートしているため、必要な方は参考にしてください。

ここで紹介します。 Node.js モジュール - リクエスト。このモジュールを使用すると、http リクエストが非常にシンプルになります。

201633195717393.png (391×56)

リクエストは非常に使いやすく、https とリダイレクトをサポートしています。

var request = require('request');
request('http://www.google.com', function (error, response, body) {
 if (!error && response.statusCode == 200) {
 console.log(body) // 打印google首页
}
})

ストリーム:

あらゆる応答をファイルストリームに出力できます。

request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))

次に、ファイルを PUT または POST リクエストに渡すこともできます。ヘッダーが指定されていない場合は、ファイル拡張子が検出され、対応するコンテンツ タイプが PUT リクエストに設定されます。

fs.createReadStream('file.json').pipe(request.put('http://mysite.com/obj.json'))
リクエストはそれ自体にパイプすることもできます。この場合、元の content-type と content-length は保持されます。

request.get('http://google.com/img.png').pipe(request.put('http://mysite.com/img.png'))
フォーム:

リクエストフォームのアップロードを実装するために、application/x-www-form-urlencoded および multipart/form-data をサポートします。

x-www-form-urlencoded は非常に簡単です:

request.post('http://service.com/upload', {form:{key:'value'}})

または:

request.post('http://service.com/upload').form({key:'value'})

multipart/form-data を使用すると、ヘッダーの設定などの些細なことを心配する必要はありません、リクエストが解決に役立ちます。

var r = request.post('http://service.com/upload')
var form = r.form()
form.append('my_field', 'my_value')
form.append('my_buffer', new Buffer([1, 2, 3]))
form.append('my_file', fs.createReadStream(path.join(__dirname, 'doodle.png'))
form.append('remote_file', request('http://google.com/doodle.png'))

HTTP認証:

request.get('http://some.server.com/').auth('username', 'password', false);

または

request.get('http://some.server.com/', {
 'auth': {
 'user': 'username',
 'pass': 'password',
 'sendImmediately': false
}
});

sendImmediately、デフォルトはtrueで、基本認証ヘッダーを送信します。 false に設定すると、401 を受信したときに再試行されます (サーバーの 401 応答には、指定された認証方法 WWW-Authenticate が含まれている必要があります)。

sendImmediately が true の場合、ダイジェスト認証をサポートします。

OAuthログイン:

// Twitter OAuth
var qs = require('querystring')
 , oauth =
 { callback: 'http://mysite.com/callback/'
 , consumer_key: CONSUMER_KEY
 , consumer_secret: CONSUMER_SECRET
}
 , url = 'https://api.twitter.com/oauth/request_token'
;
request.post({url:url, oauth:oauth}, function (e, r, body) {
 // Ideally, you would take the body in the response
 // and construct a URL that a user clicks on (like a sign in button).
 // The verifier is only available in the response after a user has
 // verified with twitter that they are authorizing your app.
 var access_token = qs.parse(body)
 , oauth =
 { consumer_key: CONSUMER_KEY
 , consumer_secret: CONSUMER_SECRET
 , token: access_token.oauth_token
 , verifier: access_token.oauth_verifier
}
 , url = 'https://api.twitter.com/oauth/access_token'
;
 request.post({url:url, oauth:oauth}, function (e, r, body) {
 var perm_token = qs.parse(body)
 , oauth =
 { consumer_key: CONSUMER_KEY
 , consumer_secret: CONSUMER_SECRET
 , token: perm_token.oauth_token
 , token_secret: perm_token.oauth_token_secret
}
 , url = 'https://api.twitter.com/1/users/show.json?'
 , params =
 { screen_name: perm_token.screen_name
 , user_id: perm_token.user_id
}
;
 url += qs.stringify(params)
 request.get({url:url, oauth:oauth, json:true}, function (e, r, user) {
console.log(user)
})
})
})

カスタマイズされたHTTPヘッダー

User-Agentはオプションオブジェクトで設定できます。次の例では、github API を呼び出して、特定のウェアハウスのコレクション番号と派生番号を調べます。カスタマイズされたユーザー エージェントと https.

var request = require('request');

var options = {
 url: 'https://api.github.com/repos/mikeal/request',
 headers: {
 'User-Agent': 'request'
}
};

function callback(error, response, body) {
 if (!error && response.statusCode == 200) {
 var info = JSON.parse(body);
 console.log(info.stargazers_count +"Stars");
 console.log(info.forks_count +"Forks");
}
}

request(options, callback);

Cookies:

デフォルトでは、Cookie は無効になっています。デフォルトまたはオプションで jar を true に設定すると、後続のリクエストで Cookie が使用されます。

var request = request.defaults({jar: true})
request('http://www.google.com', function () {
request('http://images.google.com')
})

request.jar() の新しいインスタンスを作成すると、グローバル Cookie jar をリクエストする代わりに、カスタマイズされた Cookie を使用できます。

var j = request.jar()
var request = request.defaults({jar:j})
request('http://www.google.com', function () {
request('http://images.google.com')
})

または

var j = request.jar()
var cookie = request.cookie('your_cookie_here')
j.setCookie(cookie, uri, function (err, cookie){})
request({url: 'http://www.google.com', jar: j}, function () {
request('http://images.google.com')
})

setCookie には少なくとも 3 つのパラメータが必要であり、最後のパラメータはコールバック関数であることに注意してください。

リクエスト パイプ メソッドを使用すると、画像のファイル ストリームを簡単に取得できます

 var request = require('request'),
 fs = require('fs');
 
 request('https://www.google.com.hk/images/srpr/logo3w.png').pipe(fs.createWriteStream('doodle.png'));

その他の使用方法と手順については、ここをクリックして読み続けてください: https://github.com/mikeal/request /

これは、Qunar.com からホテル クエリ データを取得する (一定期間内のホテルの各部屋タイプの価格ランキングを取得する) 非常に簡単な例です:

 var request = require('request'),
 fs = require('fs');
 
 
 var reqUrl = 'http://hotel.qunar.com/price/detail.jsp?fromDate=2012-08-18&toDate=2012-08-19&cityurl=shanghai_city&HotelSEQ=shanghai_city_2856&cn=5';
 
 request({uri:reqUrl}, function(err, response, body) {
 
 //console.log(response.statusCode);
 //console.log(response);
 
 //如果数据量比较大,就需要对返回的数据根据日期、酒店ID进行存储,如果获取数据进行对比的时候直接读文件
 var filePath = __dirname + '/data/data.js';
 
 if (fs.exists(filePath)) {
  fs.unlinkSync(filePath);
 
  console.log('Del file ' + filePath);
 }
 
 fs.writeFile(filePath, body, 'utf8', function(err) {
  if (err) {
  throw err;
  }
 
  console.log('Save ' + filePath + ' ok~');
 });
 
 console.log('Fetch ' + reqUrl + ' ok~');
 });

This例は、ホテル業界の友人が、ウェブサイトで顧客に提供する価格の競争力を知りたいと考えています。

提供する価格が低すぎると、収益が少なくなります。 2 番目に低い値を確認してから、それを調整するかどうかを決定する必要があります

2. 提供された価格が高すぎる場合、予約する顧客は存在しません。

彼は多くのホテル予約業務を行っているため、たとえば 2,000 軒以上のホテルのランキングを 1 つずつ手動でチェックすることに依存していると、消極的になってしまいます。したがって、拡張するのは困難であるため、私は彼のニーズを分析し、非常に大規模なホテル予約ビジネスとして実現可能であると考えました (もちろん、データは 5 ~ 10 分ごとにページ上で自動的に更新されます)。 )。この方法によってのみ、利益を最大化し、営業部門と顧客部門の作業効率を向上させ、ホテルの協力数と会社の人員拡大を加速することができます。取引を行う;

2. 提供された価格が低すぎる場合、または高すぎる場合は、価格を直接変更するためのプラットフォームの API インターフェイスの呼び出しをサポートする必要があります。競合他社の価格調整戦略の変化を分析するための分析レポートを自動生成します。

この記事の内容は以上です。その他の関連コンテンツについては、PHP 中国語 Web サイトに注目してください。

関連する推奨事項:

nodejs のモジュール定義の概要

Node のクラスター モジュールについて学ぶ

ページの Bigpipe 非同期読み込みを実装する Nodejs の方法

以上がHTTP プロトコル要求を処理するための Node.js の Request モジュールの使用方法の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。