ホームページ >バックエンド開発 >Python チュートリアル >Python リクエスト POST メソッドのガイド

Python リクエスト POST メソッドのガイド

Barbara Streisand
Barbara Streisandオリジナル
2024-11-24 04:33:11403ブラウズ

Guide to Python requests POST method

Python のリクエスト ライブラリは、API 通信、特に POST リクエストの作成を簡素化する強力な http クライアント ライブラリ ツールです。リモート API と対話するアプリケーションを構築する場合でも、Web スクレイピングを構築する場合でも、リクエストを伴う POST メソッドを習得することは、効率的な Web 開発のための基本的なスキルです。

このガイドでは、サーバーにデータを送信するための重要な方法である POST リクエストを行うための Python リクエストの使用方法を包括的に説明します。例、一般的な課題、ベスト プラクティスについて説明します。

ライブラリを初めて使用する場合は、このガイドに従って pip install リクエストを使用してライブラリをインストールすることから始めることができます。

HTTP POST リクエストとは何ですか?

HTTP は、Web クライアント (ブラウザーやアプリケーションなど) とサーバー間の通信のバックボーンです。このプロトコルはリクエストを使用してデータを交換し、複数のメソッド タイプが存在する可能性があります:

  • GET : データを変更せずにサーバーから取得します。
  • POST : データをサーバーに送信します。次の用途に最適です。
    • 新しいレコード (ユーザー アカウントなど) を作成します。
    • フォームまたはユーザー入力を送信します。
    • ファイルまたは機密データの送信。
  • PUT : ユーザー プロファイルの変更など、既存のリソースを更新します。
  • DELETE : 指定されたリソースをサーバーから削除します。
  • PATCH : 既存のリソースを部分的に更新します。
  • HEAD : 本文を含まず、応答のヘッダー (メタ情報) のみを要求します。
  • OPTIONS : サーバーによってサポートされている HTTP メソッドを確認します。

Python でのリクエスト POST の使用は、データをサーバーに送信する対話には不可欠であり、このメソッドには多くの使用例が考えられます。次にそれを見てみましょう。

データ送信に POST を使用する理由

Web 開発では、他の HTTP メソッドではなく POST をいつ使用するかを理解することが重要です。限られた URL パラメータの一部としてデータを送信する GET とは異なり、POST はリクエスト本文を通じてデータを送信します。これにより、より大きなペイロードに対応し、セキュリティのためにデータを隠しておくことができます。これにより、POST メソッドは次の用途に最適になります。

  • 新しいレコードの作成 : 新しいユーザーの追加、コメントの投稿、またはドキュメントのアップロード。
  • フォームデータの送信 : ユーザーが問い合わせフォーム、検索フォーム、またはアカウント設定を通じて情報を送信するとき。
  • 機密データの送信 : GET とは異なり、POST リクエストでは URL にパラメーターが表示されないため、機密情報に対する追加のセキュリティ層が提供されます。

POST リクエストとは何かを明確に理解したら、リクエスト ライブラリを使用して Python で POST リクエストを送信する方法を見てみましょう。JSON、フォーム データ、ファイル アップロードなどの重要な形式について説明します。

Python リクエストを使用して POST リクエストを送信する

requests.post() 関数は、Python で POST リクエストを送信するための主要なツールです。 URL、ヘッダー、データ自体を指定することで、カスタマイズ可能で簡単なデータ送信が可能になります。最も一般的なデータ型には、JSON、フォーム データ、生の本文データが含まれており、これらはすべて Python リクエストの POST メソッドで簡単に処理できます。例:

POST リクエストを送信するための基本的な Python リクエストの例:

import requests

response = requests.post('https://httpbin.dev/post', data={'key': 'value'})
# or start a persisten session:
session = requests.Session()
response = session.post('https://httpbin.dev/post', data={'key': 'value'})

# Check response content
print(response.status_code)
print(response.text)

requests.Session() を使用すると、複数のリクエストにわたって特定のパラメータ (Cookie やヘッダーなど) を保持できます。これは、サーバーが現在のクライアントの状態を追跡し、別のデータを返したり、特定のヘッダーや Cookie が欠落している POST リクエストをブロックしたりする可能性があるため、POST リクエストを操作する場合に非常に重要です。

さまざまなコンテンツタイプ

HTTP Content-Type ヘッダーは、送信されるデータの形式を指定するため、POST リクエストでは重要です。これにより、サーバーがリクエストを正しく解釈できるようになります。

一部のサーバーは複数の POST コンテンツ タイプをサポートしますが、他のサーバーは特定の形式を必要とします。一般的な Content-Type ヘッダーとその用途を次に示します。

  • application/json は、API 通信で一般的に使用される JSON 形式を表します。
  • application/x-www-form-urlencoded は HTML フォームの送信で使用され、データを URL エンコードされたキーと値のペアとしてエンコードします。
  • ファイルのアップロード用に設計された multipart/form-data は、単一のリクエストでバイナリ ファイルやテキストなどの混合コンテンツをサポートします。

Python リクエストで Content-Type ヘッダーを設定するには、headers パラメーターを使用します。

import requests
response = requests.post(
    'https://httpbin.dev/post', 
    headers={
        "Content-Type": "application/json",
    },
    data='{ "key": "value" }'
)

これを念頭に置いて、次に POST リクエストで使用される最も一般的なデータ形式を見てみましょう。

JSONデータを投稿する方法

JSON (JavaScript Object Notation) は、構造化と解析が容易なため、API 通信によく使用される形式です。これは JavaScript でネイティブに利用でき、Python では json モジュールを使用して Python 辞書に簡単にキャストできます。

リクエスト ライブラリを使用して、JSON データを含む Python リクエスト POST を送信するのは簡単です。 request.post() で json パラメータを使用します。これにより、エンコードが自動的に処理され、Content-Type ヘッダーが設定されます:

import requests

response = requests.post('https://httpbin.dev/post', data={'key': 'value'})
# or start a persisten session:
session = requests.Session()
response = session.post('https://httpbin.dev/post', data={'key': 'value'})

# Check response content
print(response.status_code)
print(response.text)

JSON は、次のようなシナリオで頻繁に使用される最も一般的な POST データ型です。

  • ユーザー認証 : ログインまたはサインアップする際、資格情報の送信と認証トークンの受信に JSON が使用されます。
  • データの取得と送信 : 天気、株価、ユーザー プロフィールなどのデータを取得または更新するための API は、通常、JSON で応答し、多くの場合、更新の送信に JSON を必要とします。
  • 構成設定 : 多くのアプリケーションは JSON を使用して構成の詳細を送受信し、ユーザーの設定やシステム要件に基づいた柔軟なセットアップを可能にします。
  • Web アプリでのフォーム送信 : JSON は、アンケートや電子商取引トランザクションなど、フォームやユーザー入力が送信されるアプリケーションでも一般的です。

フォームデータをPOSTする方法

フォーム データは、ユーザーが次のような Web ページ上の入力フィールドを操作するときに使用されます。

  • ログインを実行しています
  • 検索を送信する
  • コメントや投稿などのユーザー生成コンテンツの送信

フォーム データは、Content-Type ヘッダー application/x-www-form-urlencoded を使用してデータを送信し、データを Key-Value 形式で URL エンコードします。この形式をよりよく理解するために、Python リクエストでフォーム データを POST する方法の例を見てみましょう:

import requests
response = requests.post(
    'https://httpbin.dev/post', 
    headers={
        "Content-Type": "application/json",
    },
    data='{ "key": "value" }'
)

上記の例では、データ パラメーターとして Python 辞書を使用しているときに、Content-Type ヘッダーが自動的に設定されます。それ以外の場合、文字列を渡す場合は、Content-Type ヘッダーを手動で設定する必要があります。

ファイルの送信

Python のリクエスト ライブラリを使用してファイルを送信するには、files パラメータを使用できます。このパラメーターはバイト データを受け取り、Content-Type ヘッダーを multipart/form-data に自動的に設定します。これは、画像、ドキュメント、メディア コンテンツをアップロードする場合に便利です。 Python リクエスト POST を使用してファイルをアップロードする方法の例をいくつか見てみましょう:

import requests

data = {'username': 'ziad', 'password': '1234'}
response = requests.post('https://httpbin.dev/api', json=data)

上記では、サーバーにデータをストリーミングするリクエストにファイル オブジェクトを提供することも、バイト データを直接提供することもできることがわかりました。

Python での POST 応答の処理

POST リクエストを作成した後、レスポンスにエラーやメタ ノートがないか確認することをお勧めします。そのため、リクエストの Response オブジェクトは、成功の評価や問題の診断に役立つ status_code、headers、json() などの属性を提供します。

まず、response.status_code を調べて、POST リクエストが成功し、レスポンス 200 OK が返されたかどうかを確認します。それ以外の場合は、以下の便利な表を参照してください。

一般的な POST 応答の問題とその解決方法

Status Code Issue Description Solution
400 Bad Request Incorrect data or syntax error The server couldn't process the request due to data format issues. Check the data format and headers (e.g., Content-Type) for correctness.
401 Unauthorized Missing or invalid authentication The request lacks valid authentication credentials. Include valid API keys or tokens in headers.
403 Forbidden Access denied The server refuses to authorize the request. Verify permissions and check the API documentation for access requirements.
404 Not Found Incorrect URL The server cannot find the requested endpoint. Double-check the endpoint URL for typos and ensure it’s valid.
405 Method Not Allowed Unsupported HTTP method The endpoint does not support the HTTP method used. Confirm the correct HTTP method is used by consulting the API documentation.
500 Internal Server Error Server-side error A generic error indicating an internal server issue. Retry the request; contact API support if the issue persists.
503 Service Unavailable Temporary overload/maintenance The server is temporarily unavailable due to high traffic or maintenance. Wait and retry later; consider implementing retry logic for critical applications.

response.status_code を監視し、エラー処理ロジックを組み込むことで、POST リクエストを行う際の堅牢で信頼性の高い対話を保証できます。

応答ステータス コードを処理する方法の例を次に示します。

import requests

response = requests.post('https://httpbin.dev/post', data={'key': 'value'})
# or start a persisten session:
session = requests.Session()
response = session.post('https://httpbin.dev/post', data={'key': 'value'})

# Check response content
print(response.status_code)
print(response.text)

これらの応答を解釈する方法を知ることは、エラーを効果的に処理し、スムーズなユーザー エクスペリエンスと API インタラクションのトラブルシューティングを保証するのに役立ちます。

圧縮データの投稿

データ転送帯域幅を最適化するために、Gzip または Brotli 圧縮データを POST できます。 gzip 圧縮の例を次に示します:

import requests
response = requests.post(
    'https://httpbin.dev/post', 
    headers={
        "Content-Type": "application/json",
    },
    data='{ "key": "value" }'
)

Brotli 圧縮には、brotli パッケージを使用できます。

import requests

data = {'username': 'ziad', 'password': '1234'}
response = requests.post('https://httpbin.dev/api', json=data)

圧縮を使用すると、ペイロード サイズが大幅に減少し、帯域幅が最適化され、リクエスト速度が向上します。これは、適切に圧縮できる JSON などの形式に特に当てはまります。

同時 POST リクエストによるパフォーマンスの向上

POST リクエスト、特に大規模なデータセットや大量のデータを伴うリクエストは、データ送信とサーバー側の処理に時間がかかるため、遅くなる可能性があります。同時実行により、複数のリクエストを同時に実行できるようになり、一括データのアップロードや API 対話などのタスクが高速化され、これらの遅延が軽減されます。

残念ながら、Python のリクエスト ライブラリは asyncio による非同期操作をサポートしていないため、多数の同時 POST リクエストを効率的に処理する能力が制限されています。

ここで httpx が登場します。httpx は、Python の asyncio イベント ループとシームレスに統合する AsyncClient を提供します。これは、ブロックすることなく多数のリクエストを同時に送信できることを意味し、真の非同期サポートを必要とする高性能アプリケーションにとって httpx が強力な選択肢となります。

または、スレッドを使用して、Python リクエストでの並列リクエストを有効にすることもできます。以下は、リクエストで組み込みのスレッド パッケージを使用する例です:

form_data = {'search': 'product 1 & 2', 'count': 10}
response = requests.post(
    'https://httpbin.dev/post', 
    data=form_data,
)
# this will automatically add the Content-Type header
# and convert data from dictionary to URL encoded format
print(response.request.body)
'search=product+1+%26+2&count=10'
print(response.request.headers['Content-Type'])
'application/x-www-form-urlencoded'

# alternatively if we POST data as string
# we need to manually identify Content-Type
response = requests.post(
    'https://httpbin.dev/post', 
    data='search=product+1+%26+2&count=10'
    headers={
        "Content-Type": "application/x-www-form-urlencoded"
    }
)
print(response.request.body)
'search=product+1+%26+2&count=10'
print(response.request.headers['Content-Type'])
'application/x-www-form-urlencoded'

スレッドを使用すると、複数の POST リクエストを並行して起動でき、各スレッドが 1 つのリクエストを処理できるようになります。

同時実行と並列処理について詳しくは、専用の記事をご覧ください:

同時実行性と並列性
(https://scrapfly.io/blog/concurrency-vs-Parallelism/)

スクラップフライでパワーアップ

HTTP リクエストは難しく、ヘッドレス ブラウザの要件やクライアントのブロックによりすぐに複雑になる場合があります。そのために、Scrapfly がお手伝いします!

Guide to Python requests POST method

ScrapFly は、大規模なデータ収集のための Web スクレイピング、スクリーンショット、抽出 API を提供します。

  • ボット対策保護バイパス - ブロックせずに Web ページをスクレイピング!
  • ローテーション レジデンシャル プロキシ - IP アドレスと地理的ブロックを防ぎます。
  • JavaScript レンダリング - クラウド ブラウザを通じて動的 Web ページをスクレイピングします。
  • 完全なブラウザ自動化 - ブラウザを制御してオブジェクトをスクロール、入力、クリックします。
  • 形式変換 - HTML、JSON、テキスト、またはマークダウンとしてスクレイピングします。
  • Python と Typescript SDK、および Scrapy とノーコード ツールの統合。

よくある質問

このガイドの締めくくりとして、Python リクエストの POST に関するよくある質問への回答を示します。

Python リクエストの使用にカスタム ヘッダーを含めるにはどうすればよいですか?

headers パラメーターを使用して、ヘッダーを辞書として渡します。リクエストでは User-Agent、Content-Length、Content-Type などの一部のヘッダーが自動的に生成されるため、これらをオーバーライドする場合は注意してください。

Python リクエストの data パラメーターと json パラメーターの違いは何ですか?

データは、フォームエンコードされたデータ (デフォルト) または生データ (Content-Type ヘッダーがオーバーライドされた場合) 用です。一方、json は JSON 形式のデータに特化しており、Content-Type を application/json に自動的に設定します。

Python リクエスト ライブラリは非同期 POST リクエストをサポートしていますか?

残念ながら、リクエスト ライブラリは非同期リクエストをサポートしていません。ただし、httpx ライブラリは非同期機能を提供する代替手段であり、同時実行性を必要とするアプリケーションに適しています。

まとめ

この記事では、Python のリクエストの POST メソッドを詳しく調べて、次のことを学びました。

  • POST リクエストは、JSON、フォーム データ、ファイル アップロードなどのさまざまなタイプのサーバーにデータを送信するためにどのように使用されます。
  • POST リクエストの応答と一般的なステータス コードを処理する方法と、それらを修正する方法。
  • httpx または並列リクエストのスレッドを使用して、同時 POST リクエストのパフォーマンスを向上させる方法。
  • gzip モジュールと brotli モジュールを使用してデータを圧縮して帯域幅と速度を最適化する方法。

Python リクエストと POST リクエストについては学ぶべきことがたくさんありますが、このガイドを読めば、API やサーバーと効果的に対話する堅牢なアプリケーションや Web スクレイパーの構築を始めるための準備が整います。

以上がPython リクエスト POST メソッドのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。