BETA

GoogleAppsScriptのUrlFetchAppで返るHeaderのkey名が小文字になる問題

投稿日:2018-10-28
最終更新:2018-10-28

UrlFetchApp#fetch等で返ってるレスポンスHTTPResponse#getAllHeadersのKey名がいくつか小文字になる不具合に遭遇しました。

x-cybozulogin(本来はX-CybozuLogin)とかkeep-alive(本来はKeep-Alive)とか。

解決法(TypeScript)

定数クラスにヘッダー名を小文字で初期化しておいて、それをロジック内で使用する。 当然、取得した全Header名に対して小文字にする必要がある。

本当はHTTPResponse#getAllHeadersを拡張したメソッドを定義したかったが、 interfaceだけの定義のため、ちょっと厳しい。

Commons.ts

export default class Constants {
  // ヘッダー名
  // UrlFetchAppでは一部のヘッダー名が不規則で小文字になるため、小文字にて初期化を行う。
  static readonly HEADER_X_CYBOZU_LOGIN = "X-CybozuLogin".toLocaleLowerCase();
  static readonly HEADER_X_CYBOZU_ERROR = "X-Cybozu-Error".toLocaleLowerCase();
  static readonly HEADER_X_CYBOZU_USER = "X-Cybozu-User".toLocaleLowerCase();

  // インスタンス化防止のため
  private constructor() {}
}

Main.ts

  /**
   * 送信したサイボウズへのリクエストが認証情報の失効となっていないか検証
   *
   * @param res - UrlFetchApp#fetchのHTTP Response
   */
  private isLogedIn(res: HTTPResponse): boolean {
    const headers = res.getAllHeaders();
    if (
      Object.keys(headers).some(
        k => k.toLowerCase() === Constants.HEADER_X_CYBOZU_LOGIN
      )
    ) {
      // x-cybozuloginがHeader内にある場合、認証できていない。
      return false;
    }
    return true;
  }
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

勉強したことのメモ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!