request とは?
Deprecated!
2020-2-11 に廃止されました
https://www.npmjs.com/package/request
導入
command
npm info request # バージョン確認
npm install request
書式
const request = require('request');
request(options, function (error, response, body) {
// リクエスト結果の処理
});
他の書式もあるけど、optionでいろいろ変えられる書式がすき
http リクエストを投げるモジュール。
options の設定により、様々なリクエストが投げられる。
公式 もあった ← 知らずにハマったこと数知れず
ネストが深くなるのがいやなので、いつもpromiseしてます。これもついでにチートシート
function httpRequest(options) {
return new Promise((resolve, reject) => {
request(options, function (error, response, body) {
let ret = {
headers: response.headers,
body: body,
error: error,
href: response.request.uri.href, // promise.all したときリクエスト元を特定するために設定
status: response.statusCode,
}
if (error) {
reject(ret);
} else {
resolve(ret);
}
});
});
}
Promise.resolve()
.then(function(value) {
var header = {
}
var data = {
}
var options = {
}
return httpRequest(options); // リクエスト1回目
})
.then(function(value){
// リクエスト結果の処理
return httpRequest(options); // リクエスト2回目
})
.then(function(value){
// リクエスト結果の処理
})
.catch(function(reason) {
// エラー、rejectしたときの処理
});
チートシート
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0; // オレオレ証明書ドメインへリクエストするとき。curl の --insecure と同じ
var jar = request.jar(); // cookieを使うとき
var header = {
// 'Content-type': 'application/x-www-form-urlencoded', // form のときつけてくれる
// 'Content-type': 'application/json', // jsonのときつけてくれる
Authorization: 'Bearer beabea', // Basic 認証はここに書いてはいけない
}
var data = {
honya: 'honya data',
}
var options = {
url: 'http://example.com',
method: 'GET',
headers: header,
followAllRedirects: true, // 3xxが返ってきたとき、リダイレクトする。
jar: jar, // cookieを使うとき
auth: [ // Basic認証するとき
user: 'username',
password: 'password',
],
qs: data, // GET のとき query stringをurlにつけてくれる
form: data, // form-urlencoded で送るとき。Content-type ヘッダもつけてくれる
json: data, // jsonで送るとき。Content-type ヘッダもつけてくれる
proxy: 'http://userid:passuwd@proxy.com:8080/', // proxyがあるとき
}
ハマるたびに追加していきます。
めんどくさいときは、機能を探す
わーめんどくさーいと思ったときはゴリゴリ書かずに、機能を探しましょう
今までのハマり
- jar を知らず、ヘッダからset-cookieを取り出して、次のリクエストに入れてた。(動く)
- basic認証するとき、Authorizatioinヘッダにbase64した値を設定してた。(動かない)
- getパラメータをhttp_build_queryみたいな関数を作って、urlにつけてた。(動く)
- followAllRedirects を知らず、3xx が返ったときは、またリクエストしてた。(動く)
request-promise
request-promiseを使ってみたところ、bodyしか返さない上に、4xxはcatchに飛ぶので使いにくかった。
axios
オレオレ証明書ドメインへリクエストするときの設定が効かない。
process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = 0
証明書を検証しないようにするには、記述をまるっと変える必要があった。