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.