요청-404를 받고 있는지 확인하는 방법


139

Requests 라이브러리를 사용하고 웹 사이트에 액세스하여 다음 코드로 웹 사이트에서 데이터를 수집하고 있습니다.

r = requests.get(url)

부적절한 URL을 입력하고 404 오류가 반환되는 경우 오류 테스트를 추가하고 싶습니다. 의도적으로 잘못된 URL을 입력하면 다음과 같이 할 수 있습니다.

print r

나는 이것을 얻는다 :

<Response [404]>

편집하다:

나는 그것을 테스트하는 방법을 알고 싶다. 객체 유형은 여전히 ​​동일합니다. r.content또는을 할 때 r.text사용자 지정 404 페이지의 HTML을 가져옵니다.


2
다음 문서를 참조하십시오 : docs.python-requests.org/en/latest 첫 페이지는 r.status_code를 살펴볼 것을 요구합니다
Udo Klein

답변:


308

상기 봐 r.status_code속성 :

if r.status_code == 404:
    # A 404 was issued.

데모:

>>> import requests
>>> r = requests.get('http://httpbin.org/status/404')
>>> r.status_code
404

requests오류 코드 (4xx 또는 5xx)에 대한 예외를 발생 시키 려면 다음 을 호출하십시오 r.raise_for_status().

>>> r = requests.get('http://httpbin.org/status/404')
>>> r.raise_for_status()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "requests/models.py", line 664, in raise_for_status
    raise http_error
requests.exceptions.HTTPError: 404 Client Error: NOT FOUND
>>> r = requests.get('http://httpbin.org/status/200')
>>> r.raise_for_status()
>>> # no exception raised.

부울 컨텍스트에서 응답 오브젝트를 테스트 할 수도 있습니다. 상태 코드가 오류 코드 (4xx 또는 5xx)가 아닌 경우 'true'로 간주됩니다.

if r:
    # successful response

보다 명확하게하려면을 사용하십시오 if r.ok:.


1
그거 짜증나. 여분의 전화를 걸지 않고 2XX를 제외한 어떤 이유로 든 요청을 얻는 방법이 있었으면 좋겠다.
Asfand Qazi

@ AsfandQazi : 왜 1xx 또는 3xx 상태 코드에 대한 예외를 제기하고 싶습니까? 이는 오류 조건이 아닙니다.
Martijn Pieters

2
1xx 및 3xx는 라이브러리에서 투명하게 처리해야합니다. 4xx 오류에 대해 구체적으로 이야기했습니다. 물론 4xx 응답을 읽고 싶을 수도 있으므로 모든 사람에게 적용해서는 안되지만 .get()나중에 함수를 호출하는 대신 전달할 수있는 플래그가 있었으면 좋겠다 .
Asfand Qazi

@ AsfandQazi : 중요한 경우 자신의 래퍼 함수를 ​​작성하는 것이 쉽지 않습니다.
Martijn Pieters

1
그것은 조금 어수선한 것 같습니다
그게
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.