Python

【Python】【Requests】リダイレクトURLが返ってきた時にリダイレクトしないようにする

MAX

認証系のAPIにPOSTを送ったりすると、レスポンスヘッダーのLocationにリダイレクトURLが記載されていたりする場合がある。

Requestsではpost時にはリダイレクト用URLが返ってきた場合は、自動的にリダイレクト用URLにアクセスするようになっている。

スポンサーリンク

リダイレクトさせない方法

1import requests
2
3url = "http://example.com"
4# リダイレクトURLが返ってきた場合に、自動でリダイレクトしない
5response = requests.get(url, allow_redirects=False)
6
7# リダイレクト先URLを表示
8print(response.headers.get('Location'))
9# https://some-redirect.com

allow_redirectにFalseを設定することで自動でリダイレクトしなくなる。

postなどでも方法は同じ。

レスポンスのヘッダーのLocationにリダイレクトURLは格納されている。

取得する場合は、response.headers["Location"]だと存在しない場合にエラーとなるため、getメソッドを使う方がエラー時の処理を行いやすい。

ステータスコードに応じたリダイレクト処理

一般的にリダイレクト時に返ってくるステータスコード

リダイレクト時には一般的に300番台のステータスが返ってくる

  • 300 Multiple Choices: 複数のリソースが存在し、ユーザーエージェントが選択を行うことを示す。このステータスコードはほとんど使われない。
  • 301 Moved Permanently: リソースが完全に新しいURLに移動したことを示す。ユーザーエージェントは新しいURLに自動的にリダイレクトされる。
  • 302 Found (HTTP 1.1) / Moved Temporarily (HTTP 1.0): リソースが一時的に新しいURLに移動していることを示す。ユーザーエージェントは新しいURLに自動的にリダイレクトされるが、元のURLも引き続き使用可能。
  • 303 See Other: リソースが別のURLに存在し、GETメソッドを使って取得すべきであることを示す。
  • 307 Temporary Redirect: リソースが一時的に別のURLに移動していることを示すが、リダイレクト前のHTTPメソッドを保持すべきであることを示す(例えば、POSTリクエストの場合はリダイレクト後もPOSTであるべき)。
  • 308 Permanent Redirect: リソースが恒久的に新しいURLに移動したことを示すが、リダイレクト前のHTTPメソッドを保持すべきであることを示す。

ほとんどの場合、301か302が返ってきて、その場合、基本的には自動でリダイレクトするべきである。

ステータスコードに応じた処理

レスポンスのステータスコードをチェックすることで、ステータスコードに応じた処理をすることができる。

1import requests
2
3response = requests.get('http://example.com', allow_redirects=False)
4
5if response.status_code == 301:
6    print('Moved Permanently')
7    # 301に対する処理
8elif response.status_code == 302:
9    print('Found / Moved Temporarily')
10    # 302に対する処理
11else:
12    print('Status code:', response.status_code)
13    # その他のステータスコードに対する処理
14

まとめ

getやpost時の引数にalloe_redirects=Falseを設定すれば、リダイレクトURLが返ってきても自動でリダイレクト先URLへリダイレクトするのを防げる。

1import requests
2
3# allow_redirects=Falseで自動でリダイレクトするのを防ぐ
4response = requests.get('http://example.com', allow_redirects=False)

スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました