Python リクエストで Cookie を使用する

Salman Mehmood 2023年6月21日
  1. requests.get() を使用して Python で Cookie を取得する
  2. Session() クラスを使用して、ログイン後にページとの接続を維持する
Python リクエストで Cookie を使用する

このチュートリアルでは、Python で cookies パラメータを使用して Cookie を取得する requests.get() の使用方法と、ログインが必要な特定の Web ページにアクセスする方法を示します。

さらに、そのページとの接続を維持するための requests.Session() の使用についても学習します。

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 リクエストに沿っていることを確認する必要があります。

しかし、私たちの場合、usernamepassword しかないことがわかります。 ログイン後、セキュアなページに戻りました。これが get リクエストです。 secure レスポンスを使用して、要求 URL をコピーして Python スクリプトで使用します。

Python リクエストで Cookie を使用 - 出力

コード エディターにジャンプしてコードの記述を開始します。最初に行う必要があるのは、いつものように requests をインポートすることです。また、post リクエストと安全なにログインURLを設定する必要があります。get リクエストの URL

次に、post() メソッドを呼び出して usernamepassword を送信し、サーバーで認証を受ける必要があります。 そのためには、ACCESS_DATA という辞書を使用して、いくつかの payload を送信する必要があります。

Login_Dummy_web() 内にコードをラップし、data.py という別の python ファイルを作成しました。

data ファイルをインポートした後、関数を呼び出してセキュア ページの RESULT.text を返しながら、このファイルから usernamepassword にアクセスしました。

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))

出力:

Python リクエストで Cookie を使用 - ログイン ページ

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 コンテンツを取得できます。

Python リクエストで Cookie を使用 - 安全なページ

data.py ファイルのコードを以下に示します。

username = "tomsmith"
password = "SuperSecretPassword!"

詳細については、この Web サイトを参照してください。

著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

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

関連記事 - Python Requests