🙆
AxiosでリダイレクトページのSet-Cookieを取得する上で気をつけること
初めに
AxiosでリダイレクトページのSet-Cookie
を取得する上で気をつけることを書いていきます。
リクエスト?レスポンス?とHTTPの基本が良く分からない人向けに以下の記事を書いたので合わせて読むと理解が深まりますよ!
前提条件
今回の検証は以下を用います。
- 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'
]
以上です。
参考になったサイト
他の設定は公式サイトを確認することをオススメします。
Discussion