ホームページ >バックエンド開発 >Python チュートリアル >Python リクエスト POST メソッドのガイド
Python のリクエスト ライブラリは、API 通信、特に POST リクエストの作成を簡素化する強力な http クライアント ライブラリ ツールです。リモート API と対話するアプリケーションを構築する場合でも、Web スクレイピングを構築する場合でも、リクエストを伴う POST メソッドを習得することは、効率的な Web 開発のための基本的なスキルです。
このガイドでは、サーバーにデータを送信するための重要な方法である POST リクエストを行うための Python リクエストの使用方法を包括的に説明します。例、一般的な課題、ベスト プラクティスについて説明します。
ライブラリを初めて使用する場合は、このガイドに従って pip install リクエストを使用してライブラリをインストールすることから始めることができます。
HTTP は、Web クライアント (ブラウザーやアプリケーションなど) とサーバー間の通信のバックボーンです。このプロトコルはリクエストを使用してデータを交換し、複数のメソッド タイプが存在する可能性があります:
Python でのリクエスト POST の使用は、データをサーバーに送信する対話には不可欠であり、このメソッドには多くの使用例が考えられます。次にそれを見てみましょう。
Web 開発では、他の HTTP メソッドではなく POST をいつ使用するかを理解することが重要です。限られた URL パラメータの一部としてデータを送信する GET とは異なり、POST はリクエスト本文を通じてデータを送信します。これにより、より大きなペイロードに対応し、セキュリティのためにデータを隠しておくことができます。これにより、POST メソッドは次の用途に最適になります。
POST リクエストとは何かを明確に理解したら、リクエスト ライブラリを使用して Python で POST リクエストを送信する方法を見てみましょう。JSON、フォーム データ、ファイル アップロードなどの重要な形式について説明します。
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 ヘッダーとその用途を次に示します。
Python リクエストで Content-Type ヘッダーを設定するには、headers パラメーターを使用します。
import requests response = requests.post( 'https://httpbin.dev/post', headers={ "Content-Type": "application/json", }, data='{ "key": "value" }' )
これを念頭に置いて、次に POST リクエストで使用される最も一般的なデータ形式を見てみましょう。
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 データ型です。
フォーム データは、ユーザーが次のような 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)
上記では、サーバーにデータをストリーミングするリクエストにファイル オブジェクトを提供することも、バイト データを直接提供することもできることがわかりました。
POST リクエストを作成した後、レスポンスにエラーやメタ ノートがないか確認することをお勧めします。そのため、リクエストの Response オブジェクトは、成功の評価や問題の診断に役立つ status_code、headers、json() などの属性を提供します。
まず、response.status_code を調べて、POST リクエストが成功し、レスポンス 200 OK が返されたかどうかを確認します。それ以外の場合は、以下の便利な表を参照してください。
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 リクエスト、特に大規模なデータセットや大量のデータを伴うリクエストは、データ送信とサーバー側の処理に時間がかかるため、遅くなる可能性があります。同時実行により、複数のリクエストを同時に実行できるようになり、一括データのアップロードや 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 がお手伝いします!
ScrapFly は、大規模なデータ収集のための Web スクレイピング、スクリーンショット、抽出 API を提供します。
このガイドの締めくくりとして、Python リクエストの POST に関するよくある質問への回答を示します。
headers パラメーターを使用して、ヘッダーを辞書として渡します。リクエストでは User-Agent、Content-Length、Content-Type などの一部のヘッダーが自動的に生成されるため、これらをオーバーライドする場合は注意してください。
データは、フォームエンコードされたデータ (デフォルト) または生データ (Content-Type ヘッダーがオーバーライドされた場合) 用です。一方、json は JSON 形式のデータに特化しており、Content-Type を application/json に自動的に設定します。
残念ながら、リクエスト ライブラリは非同期リクエストをサポートしていません。ただし、httpx ライブラリは非同期機能を提供する代替手段であり、同時実行性を必要とするアプリケーションに適しています。
この記事では、Python のリクエストの POST メソッドを詳しく調べて、次のことを学びました。
Python リクエストと POST リクエストについては学ぶべきことがたくさんありますが、このガイドを読めば、API やサーバーと効果的に対話する堅牢なアプリケーションや Web スクレイパーの構築を始めるための準備が整います。
以上がPython リクエスト POST メソッドのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。