Requests: рдЕрдкрд╡рд╛рдж рдЙрдард╛рдПрдБ рдпрджрд┐ рд╕реНрдерд┐рддрд┐ рдХреЛрдб 200 . рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 27 рдЬреБрд▓ре░ 2014  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: psf/requests

рдирдорд╕реНрддреЗ,
рдореИрдВ рдЕрдХреНрд╕рд░ рд╕реНрдерд┐рддрд┐ рдХреЛрдб 200 рдХреЗ рдЕрдиреБрд░реЛрдз рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ (рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдЬрдм рд╕рд░реНрд╡рд░ рддреНрд░реБрдЯрд┐ 500 тАЛтАЛрдХреЗ рд╕рд╛рде рд▓реМрдЯрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд░ рдкрд╛рдКрдВрдЧрд╛)ред рддреЛ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:

    r = requests.get(self.url(False))
    if r.status_code != 200:
        raise requests.ConnectionError("Expected status code 200, but got {}".format(page.status_code))

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ allow_status_codes рдирд╛рдордХ рдПрдХ рдХреНрд╡рд╛рд░реНрдЧ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ред рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдпрд╣ None ред None , рдФрд░ рдПрдХ рдЦрд╛рд▓реА рд╕реВрдЪреА рдпрд╛ рдЯрдкрд▓ рдХрд╛ рдЕрд░реНрде рд╣реИ рд╕рднреА рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ред рдпрд╣ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ, рд╕реВрдЪреА, рдЯрдкрд▓ рдпрд╛ рдПрдирдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред рдпрджрд┐ рдпрд╣ рдПрдХ рд╕реВрдЪреА рдпрд╛ рдЯрдкрд▓ рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдЬреЛ рд╕реВрдЪреА/рдЯрдкрд▓ рдХреЗ рдЕрдВрджрд░ рд╣реИрдВ, рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рд╕реВрдЪреА рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдФрд░/рдпрд╛ рдПрдирдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред Enums рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореИрдВ рд╕рднреА "рд╕рдлрд▓" (2xx) рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ: allow_status_codes=requests.ALLOW_SUCCESS, рдЬреЛ рддрдм рддрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рд╕реНрдерд┐рддрд┐ рдХреЛрдб 2xx рди рд╣реЛред рдЕрдЧрд░ рдореИрдВ рдХреЗрд╡рд▓ рд╕рд░реНрд╡рд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдорд╛рдгрд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛), рддреЛ рдореИрдВ рдмрд╕ allow_status_codes=requests.DISALLOW_SERVER_ERROR рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВ, рдЬреЛ рд╕рд░реНрд╡рд░ рдХреЛрдб 5xx рд╣реЛрдиреЗ рдкрд░ рдЕрдкрд╡рд╛рдж рдЙрдард╛рдПрдЧрд╛ред
рдмреЗрд╢рдХ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдПрдирдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдХрд┐рд╕реА рдХреЛ рднреА рдЗрд╕реЗ рдПрдХ рд╕реВрдЪреА рдХреЗ рднреАрддрд░ рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП (200, ALLOW_REDIRECTIONS) )ред
рдпрджрд┐ рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ StatusCodeError(RequestException) рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рднрд▓реЗ рд╣реА рдореИрдВрдиреЗ рдПрдирдо рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реЛ, рдореИрдВ рдкрд╛рдпрдерди 3.4 рдХреЗ рдкреНрд░рдЧрдгрд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВ рдмрд▓реНрдХрд┐ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред Enums (рд╕реНрдерд┐рд░рд╛рдВрдХ) рдЗрд╕ рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

#request model.

ALLOW_SUCCESS = AllowSuccessEnum()
# other enums

class RequestEnum(object):
     def is_status_code_allowed(status_code):
         raise NotImplementedError

class AllowSuccessEnum(RequestEnum):
    def is_status_code_allowed(status_code):
        # return false unless status code is 2xx

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ Response рдореЗрдВ raise_for_status рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕реНрдерд┐рддрд┐ рдХреЛрдб 200 рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЕрдкрд╡рд╛рдж рдЙрдард╛рдПрдЧреА?

Python 2.7.7 (default, Jun  2 2014, 18:55:26)
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> r = requests.get('http://httpbin.org/404')
>>> r
<Response [404]>
>>> r.raise_for_status()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/requests/models.py", line 795, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: NOT FOUND

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╣реА рдХреНрдпреЛрдВ рд╣реИред рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕ рдХреЛрдб рдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд░рдЦрдиреЗ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗрдВрдЧреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдПрдкреАрдЖрдИ рдореЗрдВ рдПрдХ рдФрд░ рдХреАрд╡рд░реНрдб рддрд░реНрдХ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рдЪреНрдЫреБрдХ рд╣реИрдВред

рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ Response рдореЗрдВ raise_for_status рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕реНрдерд┐рддрд┐ рдХреЛрдб 200 рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЕрдкрд╡рд╛рдж рдЙрдард╛рдПрдЧреА?

Python 2.7.7 (default, Jun  2 2014, 18:55:26)
[GCC 4.2.1 Compatible Apple LLVM 5.1 (clang-503.0.40)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> r = requests.get('http://httpbin.org/404')
>>> r
<Response [404]>
>>> r.raise_for_status()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/site-packages/requests/models.py", line 795, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 404 Client Error: NOT FOUND

@ рд▓реБрдХрд╛рд╕рд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рдХреЛ рд╕рд╣реЗрдЬ рд╕рдХрддрд╛ рд╣реИ (

@ sigmavirus24 рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдореМрдЬреВрдж рд╣реИред рдЖрдкрдХреЛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдбреЙрдХреНрд╕ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдФрд░ рдЕрдкрд╡рд╛рдж рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдПрдХ HTTPError рдХреЛ raise_for_status рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ HTTPError рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ "рдЕрдорд╛рдиреНрдп HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рджреБрд░реНрд▓рдн рдШрдЯрдирд╛ рдореЗрдВ" рдЙрдард╛рдП рдЬрд╛рдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддрд╛ рд╣реИред
рдЖрдк рдореЗрд░реЗ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдореЗрд░реЗ raise_for_status рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдпрд╣ рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐ рдХреЛрдб рдХреЛ рднреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХреЗред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕