🙆

AxiosでリダイレクトページのSet-Cookieを取得する上で気をつけること

2022/08/08に公開

初めに

AxiosでリダイレクトページのSet-Cookieを取得する上で気をつけることを書いていきます。

リクエスト?レスポンス?とHTTPの基本が良く分からない人向けに以下の記事を書いたので合わせて読むと理解が深まりますよ!

https://zenn.dev/amezousan/articles/2020-10-15-http-basic

前提条件

今回の検証は以下を用います。

  • node v14.19.1
  • Axios - v0.27.2

困ったこと

リダイレクト後のレスポンスしか取得できない

  • maxRedirects: 0を設定することで1回もリダイレクトさせない (デフォルト設定では5回までページリダイレクトを許可する)

例: axios.js

const axios = require('axios');

axios.get('https://httpstat.us/302', {maxRedirects: 0})
  .then(res => {
    console.log(res)
  })
  .catch(err => {
  })

リダイレクトページのレスポンスヘッダが取得できない

  • Axiosは302リダイレクトを「エラー」として処理する為、catchの方にレスポンスが返ってきます。

例: axios.js

const axios = require('axios');

axios.get('https://httpstat.us/302', {maxRedirects: 0})
  .then(res => {
    console.log(res)
  })
  .catch(err => {
    console.log(err, err.response.headers['set-cookie'])
  })

node axios.js

[AxiosError: Request failed with status code 302] {
...
  response: {
    status: 302,
    statusText: 'Found',
    headers: {
      'content-length': '34',
      connection: 'close',
      'content-type': 'application/json',
      date: 'Mon, 08 Aug 2022 02:55:06 GMT',
      server: 'Kestrel',
      location: 'https://httpstat.us',
      'set-cookie': [Array],
      'request-context': 'appId=cid-v1:1e93d241-20e4-4513-bbd7-f452a16a5d69',
      'strict-transport-security': 'max-age=2592000'
    },

この場合、err.response.headers['set-cookie'] を取得します。

[
  'ARRAffinity=d4721d25dc1d6a1c4f955767fd76920089b19eb0f5c69ceb27e4c0f38ffe5db5;Path=/;HttpOnly;Secure;Domain=httpstat.us',
  'ARRAffinitySameSite=d4721d25dc1d6a1c4f955767fd76920089b19eb0f5c69ceb27e4c0f38ffe5db5;Path=/;HttpOnly;SameSite=None;Secure;Domain=httpstat.us'
]

以上です。

参考になったサイト

他の設定は公式サイトを確認することをオススメします。

https://axios-http.com/docs/req_config

Discussion