目录
Python的requests库是一个非常流行的HTTP客户端库,它提供了一种简单的方式来发送HTTP/1.1请求,并且能够与任何基于HTTP的API进行交互。在本文中,我将介绍如何使用requests库,并提供一些常用的示例,从而帮助你从入门到出门。
1.安装requests库
要使用requests库,你需要先安装它。你可以通过以下命令在终端中安装requests:
pip install requests
在安装完成后,你可以在Python脚本中导入requests库:
import requests
2.发送HTTP请求
requests库提供了几种不同的方法来发送HTTP请求,包括GET、POST、PUT、DELETE等。下面我们将介绍如何使用requests发送GET和POST请求。
2.1 发送GET请求
要发送GET请求,你可以使用requests库的get()方法。例如,要从https://www.baidu.com获取网页内容,你可以使用以下代码:
import requests
response = requests.get('https://www.baidu.com')
print(response.text)
在这个例子中,我们使用requests.get()方法发送了一个HTTP GET请求,并将响应保存在response变量中。我们可以使用response.text属性获取响应的文本内容,并将其打印到控制台上。
2.2 发送POST请求
要发送POST请求,你可以使用requests库的post()方法。例如,要向http://httpbin.org/post发送一个包含JSON数据的POST请求,你可以使用以下代码:
import requests
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('http://httpbin.org/post', json=data)
print(response.json())
在这个例子中,我们使用requests.post()方法发送了一个HTTP POST请求,并将包含JSON数据的字典作为参数传递给了json参数。我们可以使用response.json()方法获取响应的JSON内容,并将其打印到控制台上。
3.处理响应
当你发送HTTP请求后,你将会收到一个响应对象。这个响应对象包含了HTTP响应的状态码、头部信息和响应内容。下面我们将介绍如何处理这个响应对象。
3.1 获取响应状态码
要获取响应状态码,你可以使用response.status_code属性。例如,要获取上面的例子中http://httpbin.org/post响应的状态码,你可以使用以下代码:
import requests
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('http://httpbin.org/post', json=data)
print(response.status_code)
在这个例子中,我们使用response.status_code属性获取响应的状态码,并将其打印到控制台上。
3.2 获取响应头部信息
要获取响应头部信息,你可以使用response.headers属性。例如,要获取上面的例子中http://httpbin.org/post响应的头部信息,你可以使用以下代码:
import requests
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('http://httpbin.org/post', json=data)
print(response.headers)
在这个例子中,我们使用response.headers属性获取响应的头部信息,并将其打印到控制台上。
3.3 获取响应内容
要获取响应内容,你可以使用response.content属性(返回二进制数据)或response.text属性(返回Unicode数据)。例如,要获取上面的例子中http://httpbin.org/post响应的内容,你可以使用以下代码:
import requests
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('http://httpbin.org/post', json=data)
print(response.content)
print(response.text)
在这个例子中,我们使用response.content和response.text属性获取响应的内容,并将其打印到控制台上。
4.请求参数
requests库提供了多种方法来传递请求参数。下面我们将介绍如何使用URL参数、请求头和请求体传递请求参数。
4.1 URL参数
要使用URL参数传递请求参数,你可以将参数添加到URL中。例如,要向https://www.baidu.com/search发送一个包含q参数的GET请求,你可以使用以下代码:
import requests
params = {'q': 'python'}
response = requests.get('https://www.baidu.com/search', params=params)
print(response.url)
在这个例子中,我们将包含q参数的字典作为params参数传递给了requests.get()方法。requests库将自动将这些参数添加到URL中,并发送一个GET请求。我们可以使用response.url属性获取完整的请求URL,并将其打印到控制台上。
4.2 请求头
要使用请求头传递请求参数,你可以将参数添加到headers参数中。例如,要向http://httpbin.org/get发送一个包含User-Agent头部的GET请求,你可以使用以下代码:
import requests
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get('http://httpbin.org/get', headers=headers)
print(response.json())
在这个例子中,我们将包含User-Agent头部的字典作为headers参数传递给了requests.get()方法。requests库将自动将这个头部添加到请求中,并发送一个GET请求。我们可以使用response.json()方法获取响应的JSON内容,并将其打印到控制台上。
4.3 请求体
要使用请求体传递请求参数,你可以将参数添加到data参数中。例如,要向http://httpbin.org/post发送一个包含JSON数据的POST请求,你可以使用以下代码:
import requests
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('http://httpbin.org/post', data=data)
print(response.json())
在这个例子中,我们将包含JSON数据的字典作为data参数传递给了requests.post()方法。requests库将自动将这个数据添加到请求体中,并发送一个POST请求。我们可以使用response.json()方法获取响应的JSON内容,并将其打印到控制台上。
5.错误处理
当你发送HTTP请求时,可能会遇到各种错误,例如连接超时、请求超时、请求被拒绝等。requests库提供了一种简单的方式来处理这些错误,从而使你的代码更加健壮。
5.1 连接超时
当你发送HTTP请求时,如果连接超时,requests库将抛出一个ConnectionError异常。例如,要向http://httpbin.org/get发送一个连接超时的GET请求,你可以使用以下代码:
import requests
try:
response = requests.get('http://httpbin.org/get', timeout=0.1)
print(response.json())
except requests.exceptions.ConnectionError as e:
print('ConnectionError:', e)
在这个例子中,我们使用timeout参数指定了连接超时时间(单位为秒)。如果连接超时,requests库将抛出一个ConnectionError异常。我们可以使用try-except语句来捕获这个异常,并将错误信息打印到控制台上。
5.2 请求超时
当你发送HTTP请求时,如果请求超时,requests库将抛出一个Timeout异常。例如,要向http://httpbin.org/get发送一个请求超时的GET请求,你可以使用以下代码:
import requests
try:
response = requests.get('http://httpbin.org/get', timeout=0.1)
print(response.json())
except requests.exceptions.Timeout as e:
print('Timeout:', e)
在这个例子中,我们使用timeout参数指定了请求超时时间(单位为秒)。如果请求超时,requests库将抛出一个Timeout异常。我们可以使用try-except语句来捕获这个异常,并将错误信息打印到控制台上。
5.3 请求被拒绝
当你发送HTTP请求时,如果请求被拒绝,requests库将抛出一个HTTPError异常。例如,要向http://httpbin.org/status/403发送一个被拒绝的GET请求,你可以使用以下代码:
import requests
try:
response = requests.get('http://httpbin.org/status/403')
response.raise_for_status()
except requests.exceptions.HTTPError as e:
print('HTTPError:', e)
在这个例子中,我们使用response.raise_for_status()方法来检查响应是否包含错误码。如果响应包含错误码,requests库将抛出一个HTTPError异常。我们可以使用try-except语句来捕获这个异常,并将错误信息打印到控制台上。
6.会话管理
requests库提供了一种简单的方式来管理HTTP会话,从而使你的代码更加高效。HTTP会话是一种持久化的连接,它可以在多个请求之间共享一些参数,例如Cookies和认证信息。
6.1 创建会话
要创建一个HTTP会话,你可以使用requests.Session()方法。例如,要创建一个会话并发送一个GET请求,你可以使用以下代码:
import requests
session = requests.Session()
response = session.get('http://httpbin.org/cookies/set?name=value')
print(response.json())
在这个例子中,我们使用requests.Session()方法创建了一个会话,并将这个会话保存在session变量中。我们可以使用session.get()方法发送一个GET请求,并自动将Cookies保存在会话中。我们可以使用response.json()方法获取响应的JSON内容,并将其打印到控制台上。
6.2 共享会话
要在多个请求之间共享会话,你可以将会话对象作为参数传递给requests库的其他方法。例如,要在两个请求之间共享Cookies,你可以使用以下代码:
import requests
session = requests.Session()
session.get('http://httpbin.org/cookies/set?name=value')
response = session.get('http://httpbin.org/cookies')
print(response.json())
在这个例子中,我们使用requests.Session()方法创建了一个会话,并将这个会话保存在session变量中。我们使用session.get()方法发送一个GET请求,并自动将Cookies保存在会话中。我们可以使用session.get()方法发送另一个GET请求,并自动将保存在会话中的Cookies发送给服务器。我们可以使用response.json()方法获取响应的JSON内容,并将其打印到控制台上。
7.SSL验证和代理
requests库提供了一些选项来处理SSL验证和代理。下面我们将介绍如何禁用SSL验证和使用代理。
7.1 禁用SSL验证
当你发送HTTPS请求时,requests库默认会验证服务器的SSL证书。如果你想忽略SSL验证,你可以将verify参数设置为False。例如,要向https://www.baidu.com发送一个不验证SSL证书的GET请求,你可以使用以下代码:
import requests
response = requests.get('https://www.baidu.com', verify=False)
print(response.content)
在这个例子中,我们将verify参数设置为False,从而禁用了SSL验证。我们可以使用response.content属性获取响应的二进制内容,并将其打印到控制台上。
7.2 使用代理
当你发送HTTP请求时,如果你想使用代理服务器,你可以将proxies参数设置为包含代理服务器地址和端口号的字典。例如,要向http://httpbin.org/get发送一个使用代理服务器的GET请求,你可以使用以下代码:
import requests
proxies = {'http': 'http://localhost:8080', 'https': 'http://localhost:8080'}
response = requests.get('http://httpbin.org/get', proxies=proxies)
print(response.json())
在这个例子中,我们将proxies参数设置为包含代理服务器地址和端口号的字典。requests库将自动将这个字典中的地址和端口添加到请求中,并使用代理服务器发送请求。我们可以使用response.json()方法获取响应的JSON内容,并将其打印到控制台上。
总结
在本文中,我们介绍了如何使用Python的requests库发送HTTP请求,并处理响应。我们还介绍了如何使用请求参数、错误处理、会话管理、SSL验证和代理等功能。希望这篇文章对你有所帮助,让你更加熟练地使用requests库。