web-dev-qa-db-ja.com

リクエスト-404を受け取っているかどうかを確認する方法

Requestsライブラリを使用し、Webサイトにアクセスして次のコードでデータを収集しています。

r = requests.get(url)

不適切なURLが入力され、404エラーが返された場合のエラーテストを追加します。無効なURLを意図的に入力した場合、これを行うと:

print r

私はこれを得る:

<Response [404]>

編集:

そのためのテスト方法を知りたい。オブジェクトの種類は同じままです。 r.contentまたはr.textを実行すると、カスタム404ページのHTMLが取得されます。

95
user1427661

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:を使用します。

220
Martijn Pieters