Python/requests: Difference between revisions

From Fundamental Ramen
Jump to navigation Jump to search
 
(12 intermediate revisions by the same user not shown)
Line 1: Line 1:
== Standard Usage ==
== Standard Usage ==
'''Simulate conditions.'''
<source lang="python">
<source lang="python">
import requests
import requests
from requests.exceptions import ConnectionError
from requests.exceptions import RequestException
 
def send_request(url, params={}):
    try:
        resp = requests.get(url, params=params, allow_redirects=False, timeout=1.5)
        if resp.status_code == 200:
            print('%-40s | HTTP OK' % url)
        else:
            print('%-40s | HTTP Status: %s' % (url, resp.status_code))
    except RequestException as ex:
        print('%-40s | RequestException: %s' % (url, type(ex).__name__))
 
def main(quickly=True):
    mini_list = [200, 302, 404, 500]
    full_list = [
        100, 101, 102, 103,
        200, 201, 202, 203, 204, 205, 206,
        300, 301, 302, 303, 304, 305, 306, 307, 308,
        400, 401, 402, 403, 404, 405, 406, 407, 408, 409,
        410, 411, 412, 413, 414, 415, 416, 417, 418,
        421, 422, 423, 425, 426, 428, 429,
        431, 451,
        500, 501, 502, 503, 504, 505, 506,
        511, 520, 522, 524
    ]
 
    code_list = mini_list if quickly else full_list
    for code in code_list:
        url = 'https://httpstat.us/%s' % code
        send_request(url)
 
    params = { 'sleep': 1600 }
    url = 'https://httpstat.us/200'
    send_request(url, params)
 
    url = 'httpx://httpstat.us/200'
    send_request(url)
 
if __name__ == '__main__':
    main()
</source>
 
'''Output'''


try:
<source lang="bash">
    resp = requests.get('https://duckduckgo.com/')
$ python3 requests_feed.py
    if resp.status_code == 200:
https://httpstat.us/200                  | HTTP OK
        print(resp.text)
https://httpstat.us/302                  | HTTP Status: 302
    else:
https://httpstat.us/404                  | HTTP Status: 404
        print(resp.status_code)
https://httpstat.us/500                  | HTTP Status: 500
except ConnectionError as ex:
https://httpstat.us/200?sleep=2000      | RequestException: ReadTimeout
    print(ex)
httpx://httpstat.us/200                  | RequestException: InvalidSchema
</source>
</source>


== Hierarchy ==
== Hierarchy of Exceptions ==
See: https://requests.kennethreitz.org/en/master/_modules/requests/exceptions/#RequestException
<quickgv name="requests_exp">
<quickgv name="requests_exp">
A [label="IOError"];
A [label="IOError"];
B [label="RequestException"];
B [label="RequestException"];
C1 [label="HttpError"];
C2 [label="ConnectionError"];
C3 [label="TimeoutError"];
C4 [label="URLRequired"];
C5 [label="TooManyRedirects"];
C6 [label="MissingSchema"];
C7 [label="InvalidSchema"];
C8 [label="InvalidURL"];
C9 [label="InvalidHeader"];
C10 [label="ChunkedEncodingError"];
C11 [label="ContentDecodingError"];
C12 [label="StreamConsumedError"];
C13 [label="RetryError"];
C14 [label="UnrewindableBodyError"];


A -> B;
A -> B -> {C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14};
</quickgv>
</quickgv>

Latest revision as of 08:08, 14 October 2019

Standard Usage

Simulate conditions.

import requests
from requests.exceptions import RequestException

def send_request(url, params={}):
    try:
        resp = requests.get(url, params=params, allow_redirects=False, timeout=1.5)
        if resp.status_code == 200:
            print('%-40s | HTTP OK' % url)
        else:
            print('%-40s | HTTP Status: %s' % (url, resp.status_code))
    except RequestException as ex:
        print('%-40s | RequestException: %s' % (url, type(ex).__name__))

def main(quickly=True):
    mini_list = [200, 302, 404, 500]
    full_list = [
        100, 101, 102, 103,
        200, 201, 202, 203, 204, 205, 206,
        300, 301, 302, 303, 304, 305, 306, 307, 308,
        400, 401, 402, 403, 404, 405, 406, 407, 408, 409,
        410, 411, 412, 413, 414, 415, 416, 417, 418,
        421, 422, 423, 425, 426, 428, 429,
        431, 451,
        500, 501, 502, 503, 504, 505, 506,
        511, 520, 522, 524
    ]

    code_list = mini_list if quickly else full_list
    for code in code_list:
        url = 'https://httpstat.us/%s' % code
        send_request(url)

    params = { 'sleep': 1600 }
    url = 'https://httpstat.us/200'
    send_request(url, params)

    url = 'httpx://httpstat.us/200'
    send_request(url)

if __name__ == '__main__':
    main()

Output

$ python3 requests_feed.py 
https://httpstat.us/200                  | HTTP OK
https://httpstat.us/302                  | HTTP Status: 302
https://httpstat.us/404                  | HTTP Status: 404
https://httpstat.us/500                  | HTTP Status: 500
https://httpstat.us/200?sleep=2000       | RequestException: ReadTimeout
httpx://httpstat.us/200                  | RequestException: InvalidSchema

Hierarchy of Exceptions

See: https://requests.kennethreitz.org/en/master/_modules/requests/exceptions/#RequestException