PythonのRequest Libraryを使用してHueにログインする方法をこの小さなスニペットで紹介します。
HueはDjango Web Frameworkに依存しています。 Djangoにはユーザ認証システムがあります。Djangoはリクエストオブジェクトへの認証システムをフックするためにセッションとミドルウェアを使用します。Hueは認証するために「ユーザー名(username)」と「パスワード(password)」、「csrftoken」フォーム変数を使用する認証フォームを備えています。
このコードスニペットでは、よく知られているpythonの「リクエスト 」ライブラリを使用します。最初 GET “login_url” によりcsrftoken を獲得します。 “username”、”password”、”cfrftoken”および”next_url”が含まれているフォームデータのpythonディクショナリと”Referer”を含むヘッダのpythonディクショナリ、およびcookie用の空のpythonディクショナリを作成します。”login_url”へのPOSTリクエストの後、ステータスを取得します。r.status_code
をチェックします。もしr.status_code!=200
の場合、ユーザ名またはパスワードに問題があります。
リクエストが成功したらその後のリクエストのためにヘッダとcokkieをキャプチャします。cookies=session.cookiesとheaders=session.headers
を渡すことにより 、後続のrequest.session呼び出しを行うことができます。
import requests def login_djangosite(): next_url = "/" login_url = "http://localhost:8888/accounts/login?next=/" session = requests.Session() r = session.get(login_url) form_data = dict(username="[your hue username]",password="[your hue password]", csrfmiddlewaretoken=session.cookies['csrftoken'],next=next_url) r = session.post(login_url, data=form_data, cookies=dict(), headers=dict(Referer=login_url)) # check if request executed successfully? print r.status_code cookies = session.cookies headers = session.headers r=session.get('http://localhost:8888/metastore/databases/default/metadata', cookies=session.cookies, headers=session.headers) print r.status_code # check metadata output print r.text