Requests モジュールを使用して Python でフォーム データを投稿する

Migel Hewage Nimesha 2023年10月10日
Requests モジュールを使用して Python でフォーム データを投稿する

このチュートリアルでは、Python requests モジュールについて説明し、このモジュールを使用して Python でフォーム データを投稿する方法を示します。

request モジュールを使用して Python でフォーム データを投稿する

Python を使用して Web ページにアクセスしたり、コンテンツを Web ページに投稿したりできます。

httpliburllibhttplib2 などのさまざまなモジュールがあるかどうかにかかわらず、Python の requests モジュールは最も単純で、GET および POST メソッドを含む強力なプログラムを作成できます。

requests ライブラリは、定義された URL への HTTP リクエストを作成するための Python の主要な側面の 1つです。

POSTリクエストメソッドの紹介

World Wide Web HTTP は POST リクエスト メソッドをサポートしています。 形式を考えると、POST リクエスト メソッドは、ウェブ サーバーがリクエスト メッセージの本文に含まれるデータを受け入れるように要求し、明らかにそれらを保存します。

多くの場合、ファイルをアップロードしたり、完成した Web フォームを送信したりするために使用します。 たとえば、post() は指定された URL に POST リクエストを送信します。 サーバーにデータを送信する必要がある場合にも使用できます。

POST リクエストに関する主な事実

  • データ長に制限はなく、必要に応じて設定されます。
  • ブラウザの履歴には残りません。
  • キャッシュされることはありません。
    ・しおりにはなりません。

Python での request モジュールのインストール

post() メソッドを使用するために必要な requests モジュールは、次のコマンドを使用してインストールできます。

python -m pip install requests

また

pip install requests

pipenv が Python パッケージを管理している場合、以下のコマンドを使用できます。

pipenv install requests

requests モジュールがインストールされると、次のようにインポートしてプログラムで使用できます。

import requests

では、requests.post() メソッドの使い方は? その構文は何ですか? 以下でそれを学びましょう。

構文:

requests.post(url, data={key: value}, json={key: value}, args)

ここで、args は、以下のパラメーターとして指定された引数の 0 以上に等しい:

パラメータ 説明
url リクエストの URL は重要な部分です。
data オプション。 辞書、タプルのリスト、バイト、またはファイル オブジェクトが、指定された URL に送信されます。
json オプション。 指定された URL に転送する JSON オブジェクト。
files オプション。 指定された URL に渡すファイルのディレクトリ。
allow_redirects オプション。 リダイレクトを有効または無効にするブール値。 デフォルト値は True で、リダイレクトを許可することを意味します。
auth オプション。 特定の HTTP 認証を有効にするタプル。 デフォルト値は なし です。
cert cert file または key を指定する文字列またはタプル。 オプションで、デフォルト値は None です。
cookies 指定した URL に送信する Cookie の辞書はオプションで、デフォルト値は None です。
headers オプション、デフォルト None、定義された URL に送信する HTTP ヘッダーのディクショナリ。
proxies オプション、デフォルト None、プロキシ URL へのプロトコル ディクショナリ。
stream False (ダウンロード) または True (ストリーミング) のいずれかである、応答のブール値の表示。 オプション、デフォルト False
timeout クライアントが接続を確立したり、応答を送信したりするまでの待機時間を示す数値 (省略可能)。 デフォルト値は なし です。 これは、接続が閉じるまでリクエストが続行されることを意味します。
verify サーバーの TLS 証明書を検証するかどうかを示すブール値または文字列の指示。 オプション。 デフォルト値は True です。

post() メソッドの応用

以下のコード フェンスは、ユーザーが post() メソッドを介して httpbin Web サイトにデータを投稿し、投稿方法に関する応答を取得する post() メソッドの使用法を示しています。

import requests

values = {"username": "user", "password": "test"}
result = requests.post("https://httpbin.org/post", data=values)
print(result.text)

出力:

要求モジュールを使用して Python でフォーム データを投稿する - 画像 1 を要求する

多くの情報を含む response object が受信されます。 まず、usernameuserpasswordtest であるキーと値を持つ form object。 次に、header object には、NextJSONorigin および URL といういくつかのプロパティが含まれます。

マルチパートでエンコードされたファイルを投稿するには、post() メソッドの file プロパティ を使用してサーバーにファイルを送信することにより、マルチパート POST リクエストを作成します。

import requests

files = {"file": open("test.txt", "rb")}
url = "https://httpbin.org/post"
result = requests.post(url, files=files)

print(result.text)

出力:

要求モジュールを使用して Python でフォーム データを投稿する - 画像 2 を要求する

出力として、空のデータ オブジェクトが返され、値がファイルの内容 (作業ディレクトリで作成された Test Text である test.txt ファイルの内容) であるファイル属性である files オブジェクトを取得しました。

セッション内で POST リクエストを行うには、Cookie を URL に設定してから再度リクエストを行い、Cookie が設定されているかどうかを評価します。 セッションは、ユーザーがすべてのリクエストで同じデータを送信する必要がある場合にも役立ちます。 例えば:

import requests

s = requests.Session()
s.cookies.update({"month-visit": "July"})

request01 = s.get("http://httpbin.org/cookies")
print(request01.text)
# outputs details on the "month-visit" cookie

request02 = s.get("http://httpbin.org/cookies", cookies={"year-visit": "2022"})
print(request02.text)
# outputs details on "month-visit" and "year-visit" cookie

request03 = s.get("http://httpbin.org/cookies")
print(request03.text)
# outputs details on the "month-visit" cookie

出力:

要求モジュールを使用して Python でフォーム データを投稿する - 画像 3 を要求する

出力のように、month-visit セッション Cookie が 3つのリクエストすべてで渡されます。 しかし、year-visit Cookie は 2 番目のリクエストでのみ渡されます。

3 番目のリクエストには year-visit Cookie はありません。 したがって、これにより、個々のリクエストの Cookie またはその他のデータ セットが他のセッション リクエストと一緒に渡されないことが確認されます。

post() の利点を考慮すると、ユーザーが入力した情報が URL クエリ文字列やサーバー ログに表示されることはないため、GET メソッドよりも安全です。

送信できるデータ量にははるかに大きな制限があり、POST メソッドを使用してファイルをアップロードするように、テキストまたはバイナリ データを送信できます。

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.

関連記事 - Python Requests