Requests モジュールを使用して Python でフォーム データを投稿する
このチュートリアルでは、Python requests モジュールについて説明し、このモジュールを使用して Python でフォーム データを投稿する方法を示します。
request モジュールを使用して Python でフォーム データを投稿する
Python を使用して Web ページにアクセスしたり、コンテンツを Web ページに投稿したりできます。
httplib、urllib、httplib2 などのさまざまなモジュールがあるかどうかにかかわらず、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)
出力:

多くの情報を含む response object が受信されます。 まず、username が user で password が test であるキーと値を持つ form object。 次に、header object には、Next、JSON、origin および 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)
出力:

出力として、空のデータ オブジェクトが返され、値がファイルの内容 (作業ディレクトリで作成された 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
出力:

出力のように、month-visit セッション Cookie が 3つのリクエストすべてで渡されます。 しかし、year-visit Cookie は 2 番目のリクエストでのみ渡されます。
3 番目のリクエストには year-visit Cookie はありません。 したがって、これにより、個々のリクエストの Cookie またはその他のデータ セットが他のセッション リクエストと一緒に渡されないことが確認されます。
post() の利点を考慮すると、ユーザーが入力した情報が URL クエリ文字列やサーバー ログに表示されることはないため、GET メソッドよりも安全です。
送信できるデータ量にははるかに大きな制限があり、POST メソッドを使用してファイルをアップロードするように、テキストまたはバイナリ データを送信できます。
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.
