Python HTTP リクエストの 428 ステータス コードを理解する
Pythonを使用する場合 リクエスト モジュールでは、サーバー応答に関するさまざまな問題を示す HTTP ステータス コードが発生するのが一般的です。このようなエラーの 1 つは 428 ステータス コードで、続行する前にサーバーが満たさなければならない基準を示します。これは、必要なヘッダーが提供されなかったり、要求が正しい順序で実行されなかったりすることが原因で発生することがよくあります。
このシナリオでは、ユーザーは 役職 Web サイトにリクエストを送信しましたが、意図した 200 ステータス コードではなく 428 レスポンスを受け取りました。スクリプトには適切に構築されたペイロードとヘッダーが含まれていますが、重要なコンポーネントが欠落しているため、リクエストは失敗します。
このようなエラーは、オンライン API を操作するとき、特にサーバーがリクエストを処理する前に追加の基準を必要とするときによく発生します。 428 ステータス コードの根本的な理由を理解することは、問題を解決し、適切な解決策を提供するために重要です。
この投稿では、提供された Python スクリプト内の 428 ステータス コードの最も可能性の高い原因と、それを修正して API とのスムーズな対話と 200 ステータス コードの応答を保証するための実行可能な戦略について説明します。
指示 | 使用するプログラミングコマンドの説明 |
---|---|
If-Match | このヘッダーにより、リソースが指定された ETag に一致する場合にのみリクエストが処理されることが保証されます。これは、サーバーが前提条件を満たす必要がある場合に重要であり、意図しない上書きや変更を防ぎます。 |
変更されていない場合、以降 | 指定した日付以降リソースが更新されていない場合にのみリクエストが成功することを指定します。これは、一定期間後に変更が行われないようにする競合防止措置です。 |
リクエスト.セッション() | あ セッション オブジェクトは、複数のリクエストにわたって永続的な設定と Cookie を有効にします。このアプローチでは、ヘッダーや認証トークンなどの状態をリクエスト間で保持することで、繰り返されるリクエストを最適化します。 |
session.post() | リソースを作成または編集するには、 役職 方法。この例では、フライトの検索条件を JSON として送信し、API からフライト データをリクエストします。 |
json=ペイロード | リクエストの本文に JSON オブジェクトを含めるために使用されます。スクリプトでは、フライト検索データが API に転送されて処理されます。 |
session.headers.update() | このアプローチでは、次のような新しいヘッダーがセッションに追加されます。 ユーザーエージェント そして 認可、サーバーとの正しい接続を確保し、ヘッダーや前提条件の欠落などの問題を防ぎます。 |
リファラー | ユーザーがリクエストを行う前に最後にアクセスした URL を識別するヘッダー。これは、セキュリティ上の理由から、またはリクエストの送信元を特定するために必要になることがよくあります。 |
ステータスコード | この属性は、HTTP リクエストの応答コードをチェックします。これは、リクエストが成功したか (200)、または 428 前提条件エラーなどの問題が発生したかを判断するために使用されます。 |
session.get() | GET メソッドはサーバーから情報を取得します。これは多くの場合、インタラクションの最初のリクエストであり、POST リクエストを送信する前に必要な Cookie またはトークンを取得するために使用されます。 |
Python のリクエスト モジュールの HTTP 428 ステータス コードを修正する
このソリューションは Python を利用します リクエスト モジュールでは、ヘッダーや承認などの不足している前提条件を提供することによって、POST リクエストの 428 ステータス コードを解決することに集中します。
import requests
url = 'https://wizzair.com/en-gb'
link = 'https://be.wizzair.com/24.9.0/Api/search/search'
payload = {"isFlightChange": False, "flightList": [{"departureStation": "TIA", "arrivalStation": "VIE", "departureDate": "2024-09-17"}, {"departureStation": "VIE", "arrivalStation": "TIA", "departureDate": "2024-10-20"}], "adultCount": 1, "childCount": 0, "infantCount": 0, "wdc": True}
# Add If-Match or other required precondition headers
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Accept': 'application/json, text/plain, */*',
'Referer': 'https://wizzair.com/en-gb',
'If-Match': '<your-etag-here>',
'Content-Type': 'application/json'
}
with requests.Session() as session:
session.headers.update(headers)
r = session.get(url)
print(r.status_code)
response = session.post(link, json=payload)
print(response.status_code)
if response.status_code == 428:
print('428 Error: Missing required precondition.')
代替アプローチ: 前提条件の認可を追加する
このスクリプトは、428 前提条件要件を回避し、API への認証されたアクセスを保証するための認可トークンを提供します。
import requests
url = 'https://wizzair.com/en-gb'
link = 'https://be.wizzair.com/24.9.0/Api/search/search'
token = 'Bearer your_auth_token'
payload = {"isFlightChange": False, "flightList": [{"departureStation": "TIA", "arrivalStation": "VIE", "departureDate": "2024-09-17"}, {"departureStation": "VIE", "arrivalStation": "TIA", "departureDate": "2024-10-20"}], "adultCount": 1, "childCount": 0, "infantCount": 0, "wdc": True}
headers = {
'User-Agent': 'Mozilla/5.0',
'Authorization': token,
'Content-Type': 'application/json'
}
with requests.Session() as session:
session.headers.update(headers)
r = session.get(url)
print(r.status_code)
response = session.post(link, json=payload)
print(response.status_code)
if response.status_code == 428:
print('428 Error: Ensure valid authorization or conditions.')
ヘッダー内の欠落している必須フィールドの処理
この方法では、必要なヘッダーがすべて POST リクエストで提供されるようになり、前提条件の欠落による 428 エラーが回避されます。 変更されていない場合、以降 ヘッダ。
import requests
url = 'https://wizzair.com/en-gb'
link = 'https://be.wizzair.com/24.9.0/Api/search/search'
payload = {"isFlightChange": False, "flightList": [{"departureStation": "TIA", "arrivalStation": "VIE", "departureDate": "2024-09-17"}, {"departureStation": "VIE", "arrivalStation": "TIA", "departureDate": "2024-10-20"}], "adultCount": 1, "childCount": 0, "infantCount": 0, "wdc": True}
headers = {
'User-Agent': 'Mozilla/5.0',
'Accept': 'application/json, text/plain, */*',
'If-Unmodified-Since': 'Wed, 21 Oct 2020 07:28:00 GMT',
'Content-Type': 'application/json'
}
with requests.Session() as session:
session.headers.update(headers)
r = session.get(url)
print(r.status_code)
response = session.post(link, json=payload)
print(response.status_code)
if response.status_code == 428:
print('428 Error: Missing required headers.')
HTTP リクエストの前提条件の問題の解決
HTTP リクエストを処理するとき、 428ステータスコード 通常、続行する前にサーバーが特定の前提条件を必要とすることを示します。次のようなセーフガードヘッダーを省略します。 If-Match または 変更されていない場合、以降 この問題が発生する可能性があります。これらのヘッダーは、リクエストがサーバーの期待と一致することを確認するのに役立ち、データの上書きや無効なリクエストの送信の可能性を低くします。
428 ステータス コードを受信する場合のもう 1 つの重要な問題は、セッションの処理が不十分である可能性があります。多くのオンライン アプリケーションは、セッション管理に依存してユーザーを認証し、連続するリクエストの状態を保持します。たとえば、Cookie やトークンなどのセッション データの永続化に失敗すると、サーバーが次の POST リクエストを拒否する可能性があります。 Pythonのrequests.Session()の使用 これらのセッションを正しく処理できるようになり、API との通信がよりスムーズになります。
セッション管理と前提条件に加えて、ヘッダーとペイロードの適切なフローを確保することが重要です。サーバーは頻繁に次のようなセキュリティ ヘッダーを要求します。 認可、 リファラー、 そして 起源。これらが存在しないと、特に制限されたデータや機密データにアクセスする場合、リクエストが失敗する可能性があります。これらのヘッダーがリクエスト内で提供され、適切に形成されていることを確認すると、428 エラーやその他の問題を回避できます。
Python の HTTP 428 エラーに関するよくある質問
- 428ステータスコードは何を意味しますか?
- 428 ステータス コードは、サーバーがリクエストを処理する前にヘッダーやトークンの検証などの特定の基準を必要とすることを示します。
- Python で 428 エラーを修正するにはどうすればよいですか?
- 次のようなヘッダーを使用します If-Match または If-Unmodified-Since、セッションが適切に保存されていることを確認してください requests.Session()。
- POST リクエストが 428 エラーを返すのはなぜですか?
- POST リクエストを処理する前に、サーバーは既存のヘッダーやトークンなどの条件をチェックする可能性があります。
- の役割は何ですか If-Match ヘッダ?
- の If-Match ヘッダーにより、リソースが指定された ETag 値と一致する場合にのみリクエストが処理されることが保証されます。
- Python リクエストで適切なセッション処理を保証するにはどうすればよいですか?
- 使用する requests.Session() ヘッダーや Cookie を含むセッションを後続のリクエスト間で一貫した状態に保ちます。
428 ステータス コードの修正に関する最終的な考え
428 ステータス コードは、重要なヘッダーなどの前提条件が欠落していることを示すためによく使用されます。この問題を解決するには、リクエストに次のような正しいヘッダーが含まれていることを確認してください。 If-Match または 変更されていない場合、以降。セッションの管理も重要です。
さらに、認証やその他のセキュリティ関連のヘッダーを適切に管理することで、POST リクエストが問題なく処理されることを保証できます。これらの基準に対処すると、サーバーは要求が成功したことを示す必要な 200 ステータス コードを返す必要があります。
HTTP 428 ステータス コード ソリューションのソースとリファレンス
- HTTP ステータス コードと前提条件エラーのトラブルシューティングに関する情報は、次から取得しました。 Mozilla 開発者ネットワーク 。
- 公式の Python リクエスト ドキュメントには、HTTP リクエストのセッションとヘッダーの処理に関する詳細な洞察が記載されています。訪問 Python リクエスト ライブラリ 。
- セッションの処理と API トークンの管理を理解するには、次のリソースがあります。 リアルパイソン 参照されました。
- HTTP エラー処理の追加の例とトラブルシューティング手順は、次の場所にあります。 スタックオーバーフロー 。