Python リクエストで Cookie を使用する
このチュートリアルでは、Python で cookies
パラメータを使用して Cookie を取得する requests.get()
の使用方法と、ログインが必要な特定の Web ページにアクセスする方法を示します。
さらに、そのページとの接続を維持するための requests.Session()
の使用についても学習します。
requests.get()
を使用して Python で Cookie を取得する
requests
ライブラリを使用すると、サーバーから HTTP Cookie を作成および読み取ることができます。 MDN のドキュメント によると、Cookie はサーバーがユーザーの Web ブラウザーに送信する小さなデータ
です。
Cookie をブラウザに保存し、サーバーに送り返すことができます。 通常、Cookie は次のいずれかの目的で使用されます。
- ログインのためのセッション管理
- ショッピングカート
- ユーザーのパーソナライゼーション、またはユーザーの行動の追跡
このセクションでは、Cookie の使用方法を示します。次のセクションでは、最初の目的 (ログインのためのセッション管理) を使用します。
requests
ライブラリで Cookie を送受信するには、まず requests
をインポートします。 インポートに続いて、URL
という名前の変数を設定して、リンクを string
として渡します。
この URL
を使用するのは、サーバーに送信した Cookie 情報を確認するための単純な応答本文を提供するためです。 たとえば、ユーザーの場所に基づいてユーザー エクスペリエンスをカスタマイズしたいとします。
このようにして、ユーザーが住所を入力しなくても、製品の配送見積もりを提供できます。 これを行うために、Cookie でユーザーの位置を知るように要求し、ユーザーが同意した場合、その情報を Cookie に保存します。
このイベントで受け取ったコンテンツを模倣するために、location
のキーと New York
の値を持つ CK
という辞書を宣言します。
次に、応答オブジェクト response
を宣言し、requests.get()
メソッドを使用して設定します。 最初のパラメーターとして URL
変数を入力し、続いて CK
辞書と等しく設定される cookies
キーワードを入力します。
リクエストが設定されたので、response.text
を使用してレスポンス オブジェクトからテキストを出力できます。 スクリプトが実行されると、送信したばかりの Cookie が応答本文内にあることがわかります。
import requests
URL = "https://httpbin.org/cookies"
CK = {"location": "New York"}
response = requests.get(URL, cookies=CK)
print(response.text)
出力:
{
"cookies": {
"location": "New York"
}
}
サーバーから Cookie を受け取るには、Google の Web サイトに既に設定されている Cookie を使用します。
Session()
クラスを使用して、ログイン後にページとの接続を維持する
ブラウザーで要素検査ツールを使用すると、ログイン要求が送信された場所を確認し、プログラムでそれを模倣できます。 また、セッション部分により、ログインの背後にあるすべてのページにアクセスして、生き続けることができます。
コードを書く前に、いくつかのことをしなければなりません。 ただし、ログイン URL
を見つけて、その post
リクエストで送信されるパラメーターを確認する必要があります。
ログイン認証情報が必要なので、この例ではダミー サイトを使用しているため、ログイン情報を共有します。
ユーザー名
と パスワード
が必要なシンプルなログイン フォームがあります。 与えられた情報を使用してこれにログインすると、ログインして安全な領域を取得します。
inspect 要素を使用してネットワークタブに移動すると、リクエストとレスポンスが表示されます。 Login
ボタンをクリックすると、いくつかのリクエストがポップアップ表示されます。
ページにログインする前に、[ネットワーク] タブですべてを確認できるように、保存ログを確認する必要があります。 authenticate
リクエストを開くと、いくつかの情報が得られます。そのうちの 1つは post
リクエストです。
post
リクエストは Web ブラウザからサーバーに送信されるリクエストで、get
リクエストは投稿されている URL
を見つけるために戻ってくる情報です。
post
リクエスト URL
をコピーします。これは、Python スクリプトから post
リクエストを送信するためです。 payload
内にフォーム データがあります。
payload
内でより多くの情報が見つかる場合があるため、すべてのパラメーターが post
リクエストに沿っていることを確認する必要があります。
しかし、私たちの場合、username
と password
しかないことがわかります。 ログイン後、セキュアなページに戻りました。これが get
リクエストです。 secure
レスポンスを使用して、要求 URL
をコピーして Python スクリプトで使用します。
コード エディターにジャンプしてコードの記述を開始します。最初に行う必要があるのは、いつものように requests
をインポートすることです。また、post
リクエストと安全なにログイン
URLを設定する必要があります。
get リクエストの URL
。
次に、post()
メソッドを呼び出して username
と password
を送信し、サーバーで認証を受ける必要があります。 そのためには、ACCESS_DATA
という辞書を使用して、いくつかの payload
を送信する必要があります。
Login_Dummy_web()
内にコードをラップし、data.py
という別の python ファイルを作成しました。
data
ファイルをインポートした後、関数を呼び出してセキュア ページの RESULT.text
を返しながら、このファイルから username
と password
にアクセスしました。
get()
メソッドを使用して安全なページに戻ろうとしましょう。 認証されていないため、ログイン ページに戻ります。
import requests
import data
def Login_Dummy_web(username, password):
LOGIN_URL = "https://the-internet.herokuapp.com/authenticate"
SECURE_URL = "https://the-internet.herokuapp.com/secure"
ACCESS_DATA = {"username": username, "password": password}
RESULT = requests.post(LOGIN_URL, data=ACCESS_DATA)
RESULT2 = requests.get(SECURE_URL)
return RESULT2.text
print(Login_Dummy_web(data.username, data.password))
出力:
post()
メソッドを使用して既にログインしていますが、それでも、セッションがないため、安全なページの送信を拒否しています。 セッションにより、特定の Web サイトの Cookie を永続化できます。 安全なページを取得するには、requests.Session()
を使用する必要があります。
with
キーワードを使用して、コンテキスト マネージャーを使用します。 コンテキスト マネージャーは、接続を維持し、ログイン状態を維持できるので便利です。
Session()
クラスからアクセスしているため、ss
というセッション変数から get()
および post()
メソッドを呼び出す必要があります。
import requests
import data
def Login_Dummy_web(username, password):
LOGIN_URL = "https://the-internet.herokuapp.com/authenticate"
SECURE_URL = "https://the-internet.herokuapp.com/secure"
ACCESS_DATA = {"username": username, "password": password}
with requests.Session() as ss:
ss.post(LOGIN_URL, data=ACCESS_DATA)
RESULT = ss.get(SECURE_URL)
return RESULT.text
print(Login_Dummy_web(data.username, data.password))
現在、(セキュア エリアへようこそ
) と表示されており、そこにログインしたことが証明されています。 ss
と呼ばれる requests.Session()
変数を使用して、別の URL
コンテンツを取得できます。
data.py
ファイルのコードを以下に示します。
username = "tomsmith"
password = "SuperSecretPassword!"
詳細については、この Web サイトを参照してください。
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn