web-dev-qa-db-ja.com

requests.codes.okには304が含まれていますか?

私は、requestsモジュールを使用して、(正しく)304 "Not Modified"で応答するgetリクエストを送信するプログラムを持っています。リクエストした後、私はresponse.status_code == requests.codes.ok、しかしこのチェックは失敗します。リクエストは304を「OK」と見なしませんか?

15
stett

実際のコード ソース内 を確認できます。 okは200のみを意味します。

19

ステータスコードが4xxでも5xxでもない場合にokを返すResponseオブジェクトには True というプロパティがあります。

したがって、次のことができます。

if response.ok:
    # 304 is included

このプロパティのコードは非常に単純です。

@property
def ok(self):
    try:
        self.raise_for_status()
    except HTTPError:
        return False
    return True
19
darkheir

ここでは、requests.statusコードの実装を確認できます ソースコード
実装により、次のようにすべて/あらゆる種類のstatus_codesにアクセスできます。

import requests
import traceback
url = "https://google.com"
req = requests.get(url)
try:
    if req.status_code == requests.codes['ok']: # Check the source code for all the codes
        print('200')
    Elif req.status_code == requests.codes['not_modified']: # 304
        print("304")
    elifreq.status_code == requests.codes['not_found']: # 404
        print("404")
    else:
        print("None of the codes")
except:
    traceback.print_exc(file=sys.stdout)

結論として、デモンストレーションのようにリクエスト/レスポンスにアクセスできます。より良い方法があると確信していますが、これは私にとってはうまくいきました。

2
user 451