2016-07-14 202 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}) 

問題

此代碼幾乎完美工作,但有時我沒有得到任何文件。我發現第一個和第三個請求返回200狀態碼,而第二個請求返回202。據我所知,(告訴我,如果我錯了)的狀態202: Accepted意味着服務器接受請求,並沒有實際的請求完成

問題返回狀態代碼:

這是否意味着下載請求,即使可以發送請求批准尚未完成,如果是這樣,如何在發送下載請求之前等待批准請求完成?

+0

據我所知這應該是不可能的。 Response.content屬性將會阻塞,直到整個響應被下載。 – user2393256

回答

7

這取決於你的服務器實現,你的服務器決定如何處理202

202接受

的請求已被接受處理,但是處理還 尚未完成。該請求最終可能會或可能不會被執行,因爲在處理實際發生時它可能是不允許的。 沒有工具可以像這樣從異步操作中重新發送狀態碼。

202響應是故意不提交的。它的目的是讓 允許服務器接受一些其他進程的請求(可能是一個 面向批處理的進程,每天只運行一次),而不要求 要求用戶代理與服務器的連接一直持續到該進程完成的 。返回的響應實體 應該包括請求當前狀態的指示和 或者指向狀態監視器的指針,或者用戶可以期望滿足請求的一些估計。

如果響應正文爲空,檢查應該有附加信息的響應頭是有意義的。

參考 - https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html