Requests — how to tell if you're getting a success message?

Saqib Ali picture Saqib Ali · Nov 6, 2017 · Viewed 26k times · Source

My question is closely related to this one.

I'm using the Requests library to hit an HTTP endpoint. I want to check if the response is a success.

I am currently doing this:

r = requests.get(url)
if 200 <= response.status_code <= 299:
    # Do something here!

Instead of doing that ugly check for values between 200 and 299, is there a shorthand I can use?

Answer

wim picture wim · Nov 6, 2017

The response has an ok property. Use that:

if response.ok:
    ...

The implementation is just a try/except around Response.raise_for_status, which is itself checks the status code.

@property
def ok(self):
    """Returns True if :attr:`status_code` is less than 400, False if not.

    This attribute checks if the status code of the response is between
    400 and 600 to see if there was a client error or a server error. If
    the status code is between 200 and 400, this will return True. This
    is **not** a check to see if the response code is ``200 OK``.
    """
    try:
        self.raise_for_status()
    except HTTPError:
        return False
    return True