μλ
νμΈμ,
λλ μ’
μ’
μμ²μ΄ μν μ½λ 200μ κ°μ§ κ²μΌλ‘ μμνκ³ κ·Έκ²μ΄ μμΌλ©΄ λ΄κ° ν μ μλ μΌμ΄ λ³λ‘ μμ΅λλ€. λ°λΌμ λ€μκ³Ό κ°μ μ½λλ₯Ό μμ±ν΄μΌ ν©λλ€.
r = requests.get(self.url(False))
if r.status_code != 200:
raise requests.ConnectionError("Expected status code 200, but got {}".format(page.status_code))
λλ allowed_status_codesλΌλ kwargκ° λ§€μ° νΈλ¦¬ν κ²μ΄λΌκ³ μκ°ν©λλ€. λ€μκ³Ό κ°μ΄ ꡬνν μ μμ΅λλ€.
κΈ°λ³Έμ μΌλ‘ None
μ
λλ€. None
, λΉ λͺ©λ‘ λλ ννμ λͺ¨λ μν μ½λ νμ©μ μλ―Έν©λλ€. μ μ, λͺ©λ‘, νν λλ μ΄κ±°νμΌ μ μμ΅λλ€. μ μμΈ κ²½μ° μ΄ νΉμ μν μ½λλ§ νμ©ν©λλ€. λͺ©λ‘ λλ ννμΈ κ²½μ° λͺ©λ‘/νν λ΄λΆμ μλ μν μ½λλ§ νμ©λ©λλ€. λͺ©λ‘μλ μ μ λ°/λλ μ΄κ±°νμ΄ μμ μ μμ΅λλ€. μ΄κ±°νμ μ‘°κΈ λ μ μ°ν΄μΌ ν©λλ€.
μλ₯Ό λ€μ΄ λͺ¨λ "μ±κ³΅μ μΈ"(2xx) μμ²μ νμ©νλ €λ©΄ λ€μκ³Ό κ°μ΄ μμ±ν μ μμ΅λλ€. μλ² μ€λ₯λ§ νμ©νμ§ μκ³ (λ°λΌμ μΈμ¦λμ§ μμ μ€λ₯λ₯Ό μ²λ¦¬νλ €λ κ²½μ°) κ°λ¨ν allowed_status_codes=requests.DISALLOW_SERVER_ERRORλ₯Ό μμ±ν μ μμ΅λλ€. κ·Έλ¬λ©΄ μλ² μ½λκ° 5xxμΈ κ²½μ° μμΈκ° λ°μν©λλ€.
λ¬Όλ‘ νΉμ μ¬λ‘λ₯Ό λ€λ£¨λ μ΄κ±°νμ΄ λ§μ΄ μμ΄μΌ ν©λλ€. κ·Έλ¦¬κ³ λͺ©λ‘ λ΄μμ κ²°ν©νμ¬ μ¬μ©ν μλ μμ΄μΌ ν©λλ€(μ: (200, ALLOW_REDIRECTIONS)
).
μν μ½λκ° νμ©λμ§ μμΌλ©΄ StatusCodeError(RequestException)
κ° λ°μν©λλ€.
μ΄κ±°νμ λν΄ μΈκΈνμ§λ§ Python 3.4μ μ΄κ±°ν κ°μ λν΄ λ§νλ κ²μ΄ μλλλ€. λλ μ€νλ € μμμ λν΄ μ΄μΌκΈ°νκ³ μμμ΅λλ€. μ΄κ±°ν(μμ)μ λ€μκ³Ό κ°μ΄ ꡬνν μ μμ΅λλ€.
#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
μ΄ μμ΄λμ΄λ₯Ό μ£Όμ μ κ°μ¬ν©λλ€!
μ΄κ²μ΄ μμ² μ체μ μνλ μ΄μ λ λΆλͺ νμ§ μμ΅λλ€. νμν μ½λλ 볡μ‘νμ§ μμΌλ©° λΌμ΄λΈλ¬λ¦¬μ μ΄ μ½λλ₯Ό 보μ ν¨μΌλ‘μ¨ λ§μ κ°μΉλ₯Ό μΆκ°ν κ²μ΄λΌκ³ μκ°νμ§ μμ΅λλ€. κ·Έλ¬λ μ°λ¦¬λ APIμ λ€λ₯Έ ν€μλ μΈμλ₯Ό μΆκ° _ν _ κ²μ λλ€. μ΄λ μ°λ¦¬κ° λλΆλΆμ μκ°μ νκΈ°λ₯Ό 꺼리λ κ²μ λλ€.
λν κ° Response
μλ μν μ½λκ° 200μ΄ μλ κ²½μ° μμΈλ₯Ό λ°μμν€λ raise_for_status
λ©μλκ° μμ§ μμ΅λκΉ?
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
@Lukasa λ§€μ° νΈλ¦¬νκΈ° λλ¬Έμ λ§μ μ½λλ₯Ό μ μ₯ν μ μμ΅λλ€ (νλ‘μ νΈκ° μμ²μ μ¬μ©νλ€κ³ κ°μ ν΄ λ΄ μλ€. μ΄ νλ‘μ νΈλ μμ²μ μ½ 100 λ² μ¬μ©ν©λλ€. λ°λΌμ 200 μ€μ μ½λλ₯Ό μ μ₯νκ³ μμ±ν΄μΌνκΈ° λλ¬Έμ μ€νλ₯Ό λ°©μ§ ν μ μμ΅λλ€. μμΈλ₯Ό 100ν(μμΈλ₯Ό λ°μμν€λ λ°©λ²μ μ¬μ©νμ§ μλ κ²½μ°)νκ³ μμΈ/μ€λ₯λ₯Ό ν΅ν©ν©λλ€(λ€λ₯Έ APIκ° μμ²μ μ¬μ©νκ³ μλͺ»λ μν μ½λμ κ²½μ° μ¬μ©μ μ§μ μ€λ₯λ₯Ό μΌμΌν¬ μ μμ΅λλ€. μμ²κ³Ό λμΌν μμΈκ° λ°μν¨).
@sigmavirus24 μ£μ‘ν©λλ€. μ΄ λ°©λ²μ΄ μλμ§ λͺ°λμ΅λλ€. λ¬Έμμ μ€λ₯ λ° μμΈ μΉμ
μμ raise_for_statusμ μν΄ HTTPErrorκ° λ°μν μ μμμ μΈκΈν΄μΌ ν©λλ€. HTTPErrorλ νμ¬ "μ ν¨νμ§ μμ HTTP μλ΅μ λλ¬Έ κ²½μ°"λ§ λ°μνλ€κ³ μ£Όμ₯ν©λλ€.
λ€λ₯Έ μν μ½λλ νμ©ν μ μλλ‘ λ΄ μμ΄λμ΄ μ€ μΌλΆλ₯Ό λ΄ raise_for_statusμ ꡬννλ κ²μ κ³ λ €ν μλ μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
λν κ°
Response
μλ μν μ½λκ° 200μ΄ μλ κ²½μ° μμΈλ₯Ό λ°μμν€λraise_for_status
λ©μλκ° μμ§ μμ΅λκΉ?