ぬまろぐ

←戻る

Gatling | リダイレクト先のURLから情報を取得する方法

2021/06/22

Gatlingでシナリオを実行するとサーバから302リダイレクトが返ってくると自動でリダイレクトしてくれます。これはこれで便利なのですが、リダイレクト後のレスポンスからしか情報が取れない難点があります。

今回、OIDC認証をgatlingで突破する際に302リダイレクト先のURLから情報を取得し持ち回る必要があったため、その方法を紹介します。

自動リダイレクトを無効にする

調べて最初に見つかったのはこの方法でした。disableFollowRedirectを付けることで、リダイレクト追従が無効となるため、302リダイレクトのレスポンスから情報が取得できるようになります。この状態で、レスポンスのLocationヘッダからリダイレクト先URLの情報を取得します。

http("Getting issues")
  .get("https://www.github.com/gatling/gatling/issues")
  .disableFollowRedirect
  .check( headerRegex( "Location", "pattern" ).findAll.saveAs("val1"))

但し、リダイレクトリクエストが自動で行われないので、リクエストをコーディングする必要があるためやや面倒いです。

currentLocationRegexでリダイレクト後のリクエストURLを取得する

currentLocationRegex関数を使うと、リクエストURLから情報を取得することができます。disableFollowRedirectを付けなくても、これでリダイレクト後のリクエストURLの情報にアクセスして情報が取得できます。

http("sample request")
  .get("https://www.github.com/gatling/gatling/issues")
  .check(currentLocationRegex("pattern").findAll.saveAs("val1"))

こっちの方が簡単だったため、この方法で実装しました。