python教程requests详解
文章目录
- 介绍
- 发送HTTP请求
- GET请求
- POST请求
- PUT请求
- DELETE请求
- 处理响应
- 响应状态代码
- 响应头
- 响应正文
- 处理异常
- 请求异常
- 连接异常
- 超时异常
- 结论
- 会话管理
- 文件上传
- 代理
- Cookie
- SSL验证
- 超时设置
- 异常处理
- 总结
- 参考文献
作者:爱吃熊掌的鱼
csdn博客:爱吃熊掌的鱼的博客_CSDN博客
介绍
在进行网络开发或者爬虫开发的过程中,一个强大的工具是Python的requests模块。它能够轻松地进行HTTP请求,处理响应以及提取数据。
本文将为您介绍Python requests模块的使用。在本文中,您将学习如何使用Python
requests来发送HTTP请求、处理响应,以及如何处理异常。
发送HTTP请求
发送HTTP请求是请求模块的核心。Python
requests库使用一个名为requests的方法,它允许您发送各种类型的请求,包括GET、POST、PUT、DELETE等。我们首先从GET请求开始。
GET请求
GET请求是最常见的请求类型。这是因为大多数网站都允许您通过GET请求获取数据,而不需要使用其他类型的请求。
GET请求可以通过以下代码发送:
import requests
response = requests.get('http://www.example.com')
以上代码将向http://www.example.com发送一个GET请求,并将响应保存在response变量中。要检查请求是否成功,您可以检查响应的状态代码。
if response.status_code == 200:
print('Request successful!')
else:
print('Request failed.')
在上面的代码中,我们使用了响应的状态代码。如果状态代码是200,表示请求成功。状态代码的完整列表可以在HTTP协议规范中找到。
在成功获取响应后,您可以使用response对象的content属性访问响应正文。
以下是一个简单的示例:
import requests
response = requests.get('http://www.example.com')
if response.status_code == 200:
print(response.content)
else:
print('Request failed.')
在上面的代码中,我们访问了response对象的content属性,并将响应正文打印到控制台上。
GET请求还可以包含查询参数。
以下是一个包含查询参数的GET请求的示例:
import requests
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('http://www.example.com', params=params)
if response.status_code == 200:
print(response.content)
else:
print('Request failed.')
在上面的代码中,我们创建了一个名为params的字典,并将其传递给GET请求。这将自动将查询参数添加到请求URL中。
POST请求
POST请求用于向Web服务器发送数据。例如,如果您要在网站上提交表单,您将需要使用POST请求。
以下是一个使用POST请求的示例:
import requests
data = {'username': 'myusername', 'password': 'mypassword'}
response = requests.post('http://www.example.com/login', data=data)
if response.status_code == 200:
print(response.content)
else:
print('Request failed.')
在上面的代码中,我们创建了一个名为data的字典,并将其传递给POST请求。这将自动将数据添加到请求正文中。
PUT请求
PUT请求用于向Web服务器发送数据。PUT请求与POST请求类似,但PUT请求用于更新或替换现有误,PUT请求用于更新或替换现有资源,而POST请求则用于创建新资源。以下是一个使用PUT请求的示例:
import requests
data = {'name': 'newname', 'value': 'newvalue'}
response = requests.put('http://www.example.com/resource', data=data)
if response.status_code == 200:
print(response.content)
else:
print('Request failed.')
在上面的代码中,我们创建了一个名为data的字典,并将其传递给PUT请求。这将自动将数据添加到请求正文中
。
DELETE请求
DELETE请求用于从Web服务器删除资源。
以下是一个使用DELETE请求的示例:
import requests
response = requests.delete('http://www.example.com/resource')
if response.status_code == 200:
print('Resource deleted.')
else:
print('Request failed.')
在上面的代码中,我们向http://www.example.com/resource发送了一个DELETE请求,并检查响应的状态代码来确定请求是否成功。
处理响应
在发送HTTP请求后,您将接收到一个HTTP响应。Python requests模块允许您轻松地处理响应,以便提取有用的数据。
响应状态代码
在上面的代码示例中,我们使用了响应对象的status_code属性来确定请求的状态。这是一个HTTP状态代码,指示请求的成功或失败。
以下是HTTP状态代码的常见列表:
- 200:请求成功。
- 201:资源已成功创建。
- 400:请求无效。
- 401:未经授权的请求。
- 403:请求被禁止。
- 404:未找到请求的资源。
- 500:服务器发生错误。
响应头
在HTTP响应中,响应头是一个包含各种元数据的字典。您可以使用响应对象的headers属性来访问响应头。
以下是一个访问响应头的示例:
import requests
response = requests.get('http://www.example.com')
if response.status_code == 200:
print(response.headers)
else:
print('Request failed.')
在上面的代码中,我们访问了response对象的headers属性,并将响应头打印到控制台上。
响应正文
响应正文是服务器返回的实际数据。您可以使用响应对象的content属性来访问响应正文。
以下是一个访问响应正文的示例:
import requests
response = requests.get('http://www.example.com')
if response.status_code == 200:
print(response.content)
else:
print('Request failed.')
在上面的代码中,我们访问了response对象的content属性,并将响应正文打印到控制台上。
处理异常
在处理HTTP请求和响应时,可能会出现各种异常。Python requests模块允许您轻松地处理这些异常。
请求异常
如果请求失败,可能会出现请求异常。例如,如果请求的URL不存在或服务器无法连接,请求将失败。
以下是一个处理请求异常的示例:
import requests
try:
response = requests.get('http://www.example.com')
if response.status_code == 200:
print(response.content)
else:
print('Request failed.')
except requests.exceptions.RequestException as e:
print('Request failed:', e)
在上面的代码中,我们使用try-except语句捕获任何可能发生的请求异常。如果请求失败,我们将在控制台上打印异常消息。
连接异常
如果请求的URL无效或服务器无法连接,可能会出现连接异常。
以下是一个处理连接异常的示例:
python
import requests
try:
response = requests.get('http://www.example.com')
if response.status_code == 200:
print(response.content)
else:
print('Request failed.')
except requests.exceptions.ConnectionError as e:
print('Connection failed:', e)
在上面的代码中,我们使用try-except语句捕获任何可能发生的连接异常。如果连接失败,我们将在控制台上打印异常消息。
超时异常
如果请求花费的时间超过指定的时间限制,可能会出现超时异常。
以下是一个处理超时异常的示例:
python
import requests
try:
response = requests.get('http://www.example.com', timeout=1)
if response.status_code == 200:
print(response.content)
else:
print('Request failed.')
except requests.exceptions.Timeout as e:
print('Request timed out:', e)
在上面的代码中,我们使用timeout参数指定请求超时时间。如果请求超时,我们将在控制台上打印异常消息。
结论
Python requests模块提供了一种简单而强大的方法来执行HTTP请求和处理响应。在本教程中,我们讨论了如何使用Python
requests模块执行各种类型的HTTP请求,如GET、POST、PUT和DELETE请求。我们还讨论了如何处理HTTP响应,包括响应状态代码、响应头和响应正文。最后,我们还讨论了如何处理HTTP请求和响应中的异常。
如果你已经掌握了上述内容,那么你已经可以在Python中使用requests模块进行基本的HTTP请求了。但是,requests模块还提供了许多其他功能,如会话管理、文件上传、代理、Cookie等。在本节中,我们将讨论一些高级功能。
会话管理
如果您需要执行多个HTTP请求,并希望在这些请求之间共享Cookie和其他信息,那么您可以使用requests模块的Session类来管理会话。
以下是一个使用Session类的示例:
import requests
s = requests.Session()
# 第一个请求将会话对象保存在CookieJar中
s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
# 后续的请求将使用相同的会话对象和CookieJar
response = s.get('http://httpbin.org/cookies')
print(response.text)
在上面的代码中,我们创建了一个Session对象并发送了第一个请求,该请求将会话对象保存在CookieJar中。然后,我们使用相同的Session对象发送另一个请求,以便使用相同的CookieJar。
文件上传
如果您需要上传文件,可以使用requests模块的post方法,并将文件作为参数传递。
以下是一个文件上传的示例:
import requests
url = 'http://httpbin.org/post'
files = {'file': open('example.txt', 'rb')}
response = requests.post(url, files=files)
print(response.text)
在上面的代码中,我们使用post方法向httpbin.org发送一个请求,并将example.txt文件作为参数传递。在httpbin.org中,文件将作为一个名为"file"的键保存在表单数据中。
代理
如果您需要使用代理服务器来发送HTTP请求,您可以使用requests模块的proxies参数来指定代理服务器。
以下是一个使用代理服务器的示例:
import requests
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
response = requests.get('http://www.example.com', proxies=proxies)
print(response.text)
在上面的代码中,我们使用proxies参数指定了HTTP和HTTPS代理服务器。我们向http://www.example.com发送一个请求,并在请求中指定了代理服务器。注意,代理服务器地址应该是您自己的代理服务器地址。
Cookie
如果您需要访问和管理Cookie,可以使用requests模块的cookies属性。
以下是一个处理Cookie的示例:
import requests
response = requests.get('http://www.example.com')
# 查看响应中的Cookie
print(response.cookies)
# 将Cookie保存到字典中
cookies = requests.utils.dict_from_cookiejar(response.cookies)
# 将Cookie添加到请求头中
headers = {
'Cookie': '; '.join([f'{k}={v}' for k, v in cookies.items()])
}
response = requests.get('http://www.example.com', headers=headers)
print(response.text)
在上面的代码中,我们首先发送一个请求,并使用cookies属性查看响应中的Cookie。然后,我们使用requests.utils模块的dict_from_cookiejar方法将Cookie保存到字典中。最后,我们将Cookie添加到请求头中并发送了另一个请求。
SSL验证
默认情况下,requests模块会验证SSL证书。如果您需要禁用SSL验证,可以使用verify参数,并将其设置为False。
以下是一个禁用SSL验证的示例:
import requests
response = requests.get('https://www.example.com', verify=False)
print(response.text)
在上面的代码中,我们向https://www.example.com发送了一个请求,并将verify参数设置为False以禁用SSL验证。请注意,禁用SSL验证可能存在安全风险,并不推荐在生产环境中使用。
超时设置
如果您需要设置HTTP请求的超时时间,可以使用timeout参数。timeout参数指定等待响应的时间(以秒为单位),如果在指定的时间内没有响应,请求将被终止。
以下是一个设置超时时间的示例:
import requests
response = requests.get('http://www.example.com', timeout=5)
print(response.text)
在上面的代码中,我们向http://www.example.com发送了一个请求,并将timeout参数设置为5秒。如果在5秒内没有响应,请求将被终止。
异常处理
在发送HTTP请求时,可能会遇到各种异常情况,如连接超时、DNS解析失败、HTTP错误等。为了处理这些异常情况,requests模块提供了一些异常类。
以下是一些常见的异常类:
- requests.exceptions.Timeout:请求超时
- requests.exceptions.ConnectionError:连接错误
- requests.exceptions.HTTPError:HTTP错误
- requests.exceptions.TooManyRedirects:重定向次数过多
以下是一个异常处理的示例:
import requests
try:
response = requests.get('http://www.example.com', timeout=0.1)
response.raise_for_status()
except requests.exceptions.Timeout:
print('请求超时')
except requests.exceptions.HTTPError as err:
print(f'HTTP错误:{err}')
except requests.exceptions.ConnectionError:
print('连接错误')
except requests.exceptions.TooManyRedirects:
print('重定向次数过多')
else:
print(response.text)
在上面的代码中,我们使用try-except语句捕获可能发生的异常情况,并在发生异常时输出相应的错误信息。注意,raise_for_status方法可以在发生HTTP错误时抛出异常。
总结
在本教程中,我们介绍了如何在Python中使用requests模块发送HTTP请求。我们讨论了基本的GET和POST请求,以及一些高级功能,如会话管理、文件上传、代理、Cookie、SSL验证、超时设置和异常处理。使用requests模块,您可以轻松地发送HTTP请求并处理HTTP响应。
同时,我们还探讨了如何设置请求头、查询参数和请求体,并解释了如何处理响应头和响应体。最后,我们介绍了一些异常处理技巧,以帮助您处理HTTP请求中可能发生的各种异常情况。
虽然requests模块非常易用,但在实际应用中,您可能会遇到更复杂的HTTP请求场景。在这种情况下,您可能需要了解更多高级功能,如HTTP认证、HTTP长连接、HTTP压缩等。您可以在requests官方文档中找到更多详细信息。
参考文献
- requests documentation, https://docs.python-requests.org/en/latest/
- HTTP协议入门, https://www.runoob.com/http/http-tutorial.html
- HTTP协议详解, https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview
以上就是Python requests模块的教程,希望对您有所帮助!