python requests请求失败重试_吐血总结,Python Requests库使用指南

让我们首先安装requests库。为此,请运行以下命令:

pip install requests

如果你喜欢使用 Pipenv 管理Python包,你可以运行下面的命令:

pipenv install requests

一旦安装了requests,你就可以在应用程序中使用它。像这样导入requests:

import requests

现在你已经都准备完成了,那么是时候开始使用requests的旅程了。你的第一个目标是学习如何发出GET请求。

GET 请求

HTTP方法(如GET和POST)决定当发出HTTP请求时尝试执行的操作。除了GET和POST之外,还有其他一些常用的方法,你将在本教程的后面部分使用到。

最常见的HTTP方法之一是GET。GET方法表示你正在尝试从指定资源获取或检索数据。要发送GET请求,请调用requests.get()。

你可以通过下面方式来向GitHub的 Root REST API 发出GET请求:

>>> requests.get( https://api.github.com )

恭喜!你发出了你的第一个请求。接下来让我们更深入地了解该请求的响应。

响应

Response是检查请求结果的强有力的对象。让我们再次发出相同的请求,但这次将返回值存储在一个变量中,以便你可以仔细查看其属性和方法:

>>> response = requests.get( https://api.github.com )

在此示例中,你捕获了get()的返回值,该值是Response的实例,并将其存储在名为response的变量中。你现在可以使用response来查看有关GET请求结果的全部信息。

状态码

您可以从Response获取的第一部分信息是状态码。状态码会展示你请求的状态。

例如,200OK状态表示你的请求成功,而404NOT FOUND状态表示找不到你要查找的资源。还有许多其它的状态码 ,可以为你提供关于你的请求所发生的具体情况。

通过访问.status_code,你可以看到服务器返回的状态码:

>>> response.status_code

200

.status_code返回200意味着你的请求是成功的,并且服务器返回你要请求的数据。

有时,你可能想要在代码中使用这些信息来做判断:

if response.status_code == 200:

print( Success! )

elif response.status_code == 404:

print( Not Found. )

按照这个逻辑,如果服务器返回200状态码,你的程序将打印Success!如果结果是404,你的程序将打印NotFound.。

requests更进一步为你简化了此过程。如果在条件表达式中使用Response实例,则在状态码介于200和400之间时将被计算为为True,否则为False。

因此,你可以通过重写if语句来简化上一个示例:

if response:

print( Success! )

else:

print( An error has occurred. )

技术细节: 因为__bool__()是Response上的重载方法 ,因此真值测试才成立。

这意味着重新定义了Response的默认行为,用来在确定对象的真值时考虑状态码。

技术细节: 因为__bool__()是Response上的重载方法 ,因此真值测试才成立。

这意味着重新定义了Response的默认行为,用来在确定对象的真值时考虑状态码。

请记住,此方法不会验证状态码是否等于200。原因是200到400范围内的其他状态代码,例如204NO CONTENT和304NOT MODIFIED,就意义而言也被认为是成功的响应。

例如,204告诉你响应是成功的,但是下消息体中没有返回任何内容。

因此,通常如果你想知道请求是否成功时,请确保使用这方便的简写,然后在必要时根据状态码适当地处理响应。

假设你不想在if语句中检查响应的状态码。相反,如果请求不成功,你希望抛出一个异常。你可以使用.raise_for_status()执行此操作:

import requests

from requests.exceptions import HTTPError

for url in [ https://api.github.com , https://api.github.com/invalid ]:

try:

response = requests.get(url)

# If the response was successful, no Exception will be raised

response.raise_for_status()

except HTTPError as http_err:

print(f HTTP error occurred: {http_err} ) # Python 3.6

except Exception as err:

print(f Other error occurred: {err} ) # Python 3.6

else:

print( Success! )

如果你调用.raise_for_status(),将针对某些状态码引发HTTPError异常。如果状态码指示请求成功,则程序将继续进行而不会引发该异常。

进一步阅读:如果你不熟悉Python 3.6的 f-strings,我建议你使用它们,因为它们是简化格式化字符串的好方法。

进一步阅读:如果你不熟悉Python 3.6的 f-strings,我建议你使用它们,因为它们是简化格式化字符串的好方法。

现在,你对于如何处理从服务器返回的响应的状态码了解了许多。但是,当你发出GET请求时,你很少只关心响应的状态码。通常,你希望看到更多。接下来,你将看到如何查看服务器在响应正文中返回的实际数据。

响应内容

GET请求的响应通常在消息体中具有一些有价值的信息,称为有效负载。使用Response的属性和方法,你可以以各种不同的格式查看有效负载。

要以 字节 格式查看响应的内容,你可以使用.content:

>>> response = requests.get( https://api.github.com )

>>> response.content

b {"current_user_url":"https://api.github.com/user","current_user_authorizations_html_url":"https://github.com/settings/connections/applications{/client_id}","authorizations_url":"https://api.github.com/authorizations","code_search_url":"https://api.github.com/search/code?

你可能感兴趣的:(python,requests请求失败重试)