python 学习之 request 库的基本使用
Python 学习之 requests
库的基本使用
requests
是一个功能强大且简洁的 Python 库,主要用于发送 HTTP 请求。它支持多种 HTTP 方法(如 GET、POST、PUT、DELETE 等),并提供了简单易用的接口来处理请求和响应,广泛应用于 Web 数据抓取、API 调用、自动化测试等领域。
本文将详细介绍 requests
库的基本使用方法,通过代码示例和图解帮助你更好地理解和掌握该库。
一、安装 requests
库
在开始使用 requests
库之前,首先需要安装它。可以使用 pip
安装:
pip install requests
安装完成后,你就可以在 Python 中导入并使用该库了。
二、发送 HTTP 请求
requests
库支持多种 HTTP 请求方法,包括 GET
、POST
、PUT
、DELETE
等。我们首先来看一下最常用的 GET
和 POST
请求的使用方法。
1. GET
请求
GET
请求通常用于从服务器获取数据。我们可以通过 requests.get()
方法发送一个 GET
请求,并获取服务器的响应。
示例:发送 GET
请求
import requests
# 发送 GET 请求
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
# 输出响应状态码
print(f"Status Code: {response.status_code}")
# 输出响应内容
print(f"Response Text: {response.text}")
# 输出响应的 JSON 数据
print(f"JSON Data: {response.json()}")
说明:
requests.get()
:发送GET
请求。response.status_code
:获取响应的状态码(例如 200 表示请求成功)。response.text
:获取响应的文本内容。response.json()
:如果响应数据为 JSON 格式,可以使用.json()
方法将其转换为 Python 字典。
2. POST
请求
POST
请求通常用于向服务器提交数据。例如,提交表单数据或上传文件。我们可以通过 requests.post()
方法发送一个 POST
请求。
示例:发送 POST
请求
import requests
# 发送 POST 请求,传递表单数据
data = {
'title': 'foo',
'body': 'bar',
'userId': 1
}
response = requests.post('https://jsonplaceholder.typicode.com/posts', data=data)
# 输出响应状态码
print(f"Status Code: {response.status_code}")
# 输出响应的 JSON 数据
print(f"Response JSON: {response.json()}")
说明:
requests.post()
:发送POST
请求。data
:可以通过data
参数发送表单数据(字典形式)。response.json()
:获取响应的 JSON 数据。
三、传递参数
在发送请求时,常常需要携带一些查询参数(如 GET
请求的查询字符串)或表单数据(如 POST
请求)。requests
库提供了方便的方法来处理这些参数。
1. GET
请求中的查询参数
在 GET
请求中,可以通过 params
参数来传递查询字符串。
示例:传递查询参数
import requests
# 发送 GET 请求,传递查询参数
params = {
'userId': 1
}
response = requests.get('https://jsonplaceholder.typicode.com/posts', params=params)
# 输出响应的 JSON 数据
print(response.json())
说明:
params
:将查询参数以字典的形式传递,requests
会自动将其转化为查询字符串并附加到 URL 后面。
2. POST
请求中的表单数据
POST
请求中的表单数据可以通过 data
参数传递。
示例:传递表单数据
import requests
# 发送 POST 请求,传递表单数据
data = {
'username': 'john',
'password': '1234'
}
response = requests.post('https://httpbin.org/post', data=data)
# 输出响应的 JSON 数据
print(response.json())
说明:
data
:以字典的形式传递表单数据,requests
会将其编码为application/x-www-form-urlencoded
格式。
四、处理请求头
有时我们需要在请求中设置自定义请求头(如 User-Agent
、Authorization
等)。可以通过 headers
参数来传递请求头。
示例:设置请求头
import requests
# 设置自定义请求头
headers = {
'User-Agent': 'my-app',
'Authorization': 'Bearer <your_token>'
}
response = requests.get('https://jsonplaceholder.typicode.com/posts', headers=headers)
# 输出响应状态码
print(response.status_code)
说明:
headers
:将请求头信息以字典形式传递给requests.get()
或requests.post()
方法。
五、处理响应
HTTP 响应包括状态码、响应体、响应头等信息。requests
库提供了多种方法来访问这些信息。
1. 获取状态码
可以使用 response.status_code
获取 HTTP 响应的状态码。
response = requests.get('https://jsonplaceholder.typicode.com/posts')
print(f"Status Code: {response.status_code}")
2. 获取响应体
可以通过 response.text
获取响应的内容,返回的是字符串类型。
print(f"Response Text: {response.text}")
3. 获取 JSON 数据
如果响应内容是 JSON 格式,可以通过 response.json()
将其解析为 Python 字典。
data = response.json()
print(f"Response JSON: {data}")
4. 获取响应头
可以通过 response.headers
获取响应头,返回的是一个字典。
print(f"Response Headers: {response.headers}")
六、常见问题
1. 设置请求超时
为了避免请求卡住太长时间,可以设置请求超时时间。通过 timeout
参数来设置。
示例:设置请求超时
import requests
try:
response = requests.get('https://jsonplaceholder.typicode.com/posts', timeout=3)
print(response.text)
except requests.exceptions.Timeout:
print("The request timed out.")
说明:
timeout
:设置请求的最大等待时间(秒)。如果请求超过该时间,将引发Timeout
异常。
2. 处理异常
requests
库在发送请求时可能会遇到各种网络异常,如连接错误、超时错误等。我们可以使用 try-except
来捕获这些异常。
示例:处理异常
import requests
try:
response = requests.get('https://jsonplaceholder.typicode.com/posts')
response.raise_for_status() # 如果响应状态码不是 200,会抛出 HTTPError 异常
except requests.exceptions.HTTPError as err:
print(f"HTTP Error: {err}")
except requests.exceptions.RequestException as err:
print(f"Error: {err}")
说明:
response.raise_for_status()
:如果响应状态码不是 2xx,将抛出HTTPError
异常。
七、总结
requests
是一个非常简洁且功能强大的 Python 库,用于发送 HTTP 请求和处理响应。本文详细介绍了 GET
和 POST
请求的基本用法,并展示了如何传递参数、设置请求头、处理响应和常见的异常情况。
掌握了 requests
库后,你就可以轻松地进行 Web 数据抓取、调用 API、自动化测试等工作。希望通过本文的学习,你能更好地理解和使用 requests
库。
评论已关闭