web-dev-qa-db-ja.com

HTTPステータスコード200と202

Python + requestsスクリプトがあります。

スクリプトが実行する必要のあるステップ

  • ファイルをDBに送信します。
  • このファイルを承認する(DBでファイルの状態を変更する)。
  • ダウンロードファイル。

制約

承認されたファイルのみダウンロードできます

私のコード

requests.post(url_to_create, files={"file": open(path_to_file)})
requests.post(url_to_approve, data={'id': file_id})
requests.get(url_to_download, data={'id': file_id})

問題

このコードはほぼ完全に機能しますが、ファイルが取得されない場合があります。最初と3番目のリクエストは200ステータスコードを返し、2番目のリクエストは202を返すことがわかりました。私が理解しているように(間違っている場合は教えてください)ステータス202: Acceptedは、サーバーがリクエストを受け入れ、実際のリクエストが完了せずにステータスコードを返すことを意味します

質問

承認のリクエストがまだ完了していない場合でもダウンロードのリクエストを送信できることを意味します。その場合、承認リクエストが完了するまで待ってからダウンロードリクエストを送信できますか?

10
Andersson

これはサーバーの実装に依存し、サーバーは202が処理されます。

202承認

リクエストは処理のために受け入れられましたが、処理は完了していません。処理が実際に行われるときに許可されない場合があるため、要求は最終的に処理される場合と処理されない場合があります。このような非同期操作からステータスコードを再送信する機能はありません。

202の応答は、意図的に非コミットです。その目的は、サーバーが他のプロセス(おそらく、1日1回だけ実行されるバッチ指向のプロセス)への要求を受け入れることを許可することであり、プロセスへのユーザーエージェントのサーバーへの接続は、プロセスが完了するまで持続する必要はありません。このレスポンスで返されるエンティティには、リクエストの現在のステータスの表示と、ステータスモニターへのポインターまたはユーザーがリクエストが実行されると予想できる時期の推定値のいずれかが含まれている必要があります。

応答の本文が空の場合は、追加情報が含まれているはずの応答ヘッダーを確認することをお勧めします。

リファレンス- https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

15
gevorg