【Python】色々なリストの作成方法
MAX
MAX999blog
認証系の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番台のステータスが返ってくる
ほとんどの場合、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)