Djangoで作ったサイトにスクリプトでログインする方法

概要

Djangoで作ったサイトにPythonのrequestsモジュールを使ってログインしようとしたのですが、POSTのためのCSRFの認証がなかなかうまくいかなかったので要点を整理しておきます。

サンプルコード

要点は以下①~③の3つです。ややこしくなる理由は、ログインにcsrfが必要なこと(②)。及び、csrfがポストボタンを押すたびに変わってしまうため、csrfが古くならないようにPOSTする必要があること(①、③)です。

import requests

#ログインに必要な情報
#重要①:URLに「?next=アクセスしたいページ」の部分を含めてはいけない。
URL = "ログインページのURL" 
ID = "ログインするユーザのID"
PASS = "ログインするユーザのパスワード"
NEXT = "アクセスしたいページ"

#重要②:まずログインページにアクセスしてクッキーからtokenを取得する
session = requests.session()
res = session.get(URL)
csrf = session.cookies['csrftoken']

login_info = {     
        "csrfmiddlewaretoken" : csrf,
        "username" : ID,
        "password" : PASS,
        "next" : NEXT,
        }

#重要③:headerにURLを渡す。
response = session.post(URL, data=login_info, headers=dict(Referer=URL))

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA