2016-07-14 15 views
4

私はPython + requestsというスクリプトを持っています。HTTPステータスコード200 vs 202

は、そのスクリプトが実行すべき手順:

  • が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は、サーバーの要求を受け入れ、実際の要求完了

質問せずにステータスコードを返すことを意味します(I間違った場合は教えて)承認要求が既に完了していない場合、承認要求がダウンロード要求を送信する前に完了するまでどのように待つことができますか?

+0

私の知る限り。 Response.contentプロパティは、応答全体がダウンロードされるまでブロックされます。 – user2393256

答えて

7

これはサーバーの実装によって異なり、サーバーは処理する方法を決定します202

202受け入れ

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

202応答は意図的にコミットされません。その目的は、 が、サーバへのユーザエージェントの接続が、処理が完了するまで、 まで続くことを要求することなく、サーバがある他のプロセス(おそらく バッチ指向のプロセス)の要求を受け入れることを許可することです。 。この応答で返されたエンティティ は、要求の現在の状態の表示と、 ステータスモニタへのポインタ、またはユーザ が要求が実行されると予想できる何らかの見積もりを含めるべきです(SHOULD)。

レスポンス本文が空の場合は、追加情報が必要なレスポンスヘッダーを確認することが理にかなっています。

参考 - 可能にすべきではないhttps://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

関連する問題