python requestsレスポンス値の判断方法


この間は技術的にあまり考えられませんでしたが、エビの問題に遭遇しただけです。往々にして問題が大きくないので、あなたの心を込めて解決することもできます。
今回はreqeustsの戻り値に問題がありました。短い時間で調整しましたが、reqeustsが戻ってきたオブジェクトであることが分かりました。魔法の関数も含まれています。
こちらの業務はcdnのリフレッシュプリキャッシュです。このプロジェクトにとってhttp code 200、2 xx、404は友好的です。

#jb51.net

import requests
r = None
try:
 r = requests.get("https://jb51.net")
except:
 pass
if r:
 print "ok"
なぜ出力okがないですか?常識的には、rがゼロでない限り、Trueにマッチすることができますが、今回のリターンは<Resonse 404>であり、なぜ404はif判定異常を引き起こしますか?
>type(r)
>requests.modes.Resonse
requestsのソースコードを見ると、この問題を簡単に分析できます。

#jb51.net

class Response(object):
 """The :class:`Response <Response>` object, which contains a
 server's response to an HTTP request.
 """

 __attrs__ = [
  '_content', 'status_code', 'headers', 'url', 'history',
  'encoding', 'reason', 'cookies', 'elapsed', 'request'
 ]

 def __init__(self):
  super(Response, self).__init__()

  self._content = False
  self._content_consumed = False

  #: Integer Code of responded HTTP Status, e.g. 404 or 200.
  self.status_code = None

 def __repr__(self):
  return '<Response [%s]>' % (self.status_code)

 def __bool__(self):
  return self.ok

 @property
 def ok(self):
  try:
   self.raise_for_status()
  except HTTPError:
   return False
  return True

 def raise_for_status(self):
 ¦ """Raises stored :class:`HTTPError`, if one occurred."""

 ¦ http_error_msg = ''

 ¦ if 400 <= self.status_code < 500:
 ¦ ¦ http_error_msg = '%s Client Error: %s for url: %s' % (self.status_code, self.reason, self.url)

 ¦ elif 500 <= self.status_code < 600:
 ¦ ¦ http_error_msg = '%s Server Error: %s for url: %s' % (self.status_code, self.reason, self.url)

 ¦ if http_error_msg:
 ¦ ¦ raise HTTPError(http_error_msg, response=self)
END.
以上のpython requests reponse値の判断方法は小编で皆さんに提供した内容の全てです。参考にしていただければと思います。どうぞよろしくお愿いします。