web-dev-qa-db-fra.com

Le fichier requests.codes.ok inclut-il un 304?

J'ai un programme qui utilise le module des requêtes pour envoyer une requête get qui répond (correctement) avec un 304 "Non modifié". Après avoir fait la demande, je vérifie que response.status_code == requests.codes.ok, mais cette vérification échoue. Les demandes ne considèrent-elles pas un 304 comme "ok"?

15
stett

Vous pouvez vérifier les codes réels dans la source . ok signifie 200 seulement.

19
Dmitry Shevchenko

Il existe une propriété appelée ok dans l'objet Response qui renvoie True si le code d'état n'est pas un 4xx ou un 5xx.

Vous pouvez donc faire ce qui suit:

if response.ok:
    # 304 is included

Le code de cette propriété est assez simple:

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

Vous pouvez vérifier l'implémentation du code requests.status ici code source .
L'implémentation vous permet d'accéder à tous/tout type de status_codes comme suit:

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)

En conclusion, vous pouvez accéder à n'importe quelle demande-réponse comme illustré. Je suis sûr qu'il existe de meilleures façons, mais cela a fonctionné pour moi.

2
user 451