37
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

nodejs request のチートシート

Last updated at Posted at 2019-06-27

request とは?

Deprecated!

2020-2-11 に廃止されました:sob:
https://www.npmjs.com/package/request

導入

command
npm info request # バージョン確認
npm install request

書式

const request = require('request');

request(options, function (error, response, body) {
  // リクエスト結果の処理
});

他の書式もあるけど、optionでいろいろ変えられる書式がすき:heart:

http リクエストを投げるモジュール。
options の設定により、様々なリクエストが投げられる。
公式 もあった ← 知らずにハマったこと数知れず:sweat_smile:

ネストが深くなるのがいやなので、いつも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

証明書を検証しないようにするには、記述をまるっと変える必要があった。

37
38
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
37
38

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?