在 Python 中进行网络请求是日常开发中的一个常见任务,而 requests 库是处理这类任务的一种强大工 具。requests 提供了简单而灵活的接口,使得发送 HTTP 请求和处理响应变得非常容易。在这篇文章中,我们将深入研究如何使用 requests 库执行各种网络请求,处理响应以及利用一些高级功能。
01 安装 Requests
首先,确保你已经安装了 requests 库。如果没有安装,可以使用以下命令:
pip install requests
02 发送 GET 请求
requests 库的最基本用法之一就是发送 GET 请求。下面是一个简单的例子:
-
import requests
-
url = 'https://www.example.com'
-
response = requests.get(url)
-
print(f"Status Code: {response.status_code}")
-
print("Response Content:")
-
print(response.text)
在这个例子中,我们使用 requests.get() 函数发送了一个 GET 请求,并打印了响应的状态码和内容。response.text 包含了响应的文本内容。
03 发送带参数的 GET 请求
在实际应用中,我们通常需要向服务器发送一些参数。例如,在进行搜索时,可能需要将搜索关键字作为参数传递给服务器。下面是一个发送带参数的 GET 请求的例子:
-
import requests
-
url = 'https://www.example.com/search'
-
params = {'q': 'python', 'page': 1}
-
response = requests.get(url, params=params)
-
print(f"Status Code: {response.status_code}")
-
print("Response Content:")
-
print(response.text)
在这个例子中,我们通过 params 参数传递了搜索关键字和页码。
04 发送 POST 请求
使用 requests.post() 函数可以发送 POST 请求。POST 请求通常用于向服务器提交数据,比如登录信息或表单数据。
-
import requests
-
url = 'https://www.example.com/login'
-
data = {'username': 'user', 'password': 'pass'}
-
response = requests.post(url, data=data)
-
print(f"Status Code: {response.status_code}")
-
print("Response Content:")
-
print(response.text)
在这个例子中,我们通过 data 参数传递了用户名和密码。
05 自定义请求头
有时,服务器可能需要特定的请求头信息。你可以通过设置 headers 参数来自定义请求头。
-
import requests
-
url = 'https://www.example.com'
-
headers = {'User-Agent': 'my-app/1.0'}
-
response = requests.get(url, headers=headers)
-
print(f"Status Code: {response.status_code}")
-
print("Response Content:")
-
print(response.text)
在这个例子中,我们通过 headers 参数设置了一个自定义的 User-Agent 头部。
06 处理响应
requests 库使处理响应变得非常简单。你可以获取响应的状态码、头部信息和内容。下面是一个例子:
-
import requests
-
url = 'https://www.example.com'
-
response = requests.get(url)
-
print(f"Status Code: {response.status_code}")
-
print("Headers:")
-
print(response.headers)
-
print("Response Content:")
-
print(response.text)
通过 response.status_code 获取状态码,通过 response.headers 获取头部信息,通过 response.text 获取响应 内容。
07 处理 JSON 响应
如果服务器返回的是 JSON 格式的数据,requests 可以直接将其解析为 Python 对象。
-
import requests
-
url = 'https://api.example.com/data'
-
response = requests.get(url)
-
data = response.json()
-
print("Parsed JSON Data:")
-
print(data)
在这个例子中,response.json() 将响应的 JSON 内容解析为 Python 对象。
08 处理异常
在实际开发中,网络请求可能会失败或超时。requests 库允许你捕获并处理这些异常。
-
import requests
-
url = 'https://www.example.com'
-
try:
-
response = requests.get(url)
-
response.raise_for_status() # 检查是否有错误的响应码
-
except requests.exceptions.HTTPError as errh:
-
print(f"HTTP Error: {errh}")
-
except requests.exceptions.ConnectionError as errc:
-
print(f"Error Connecting: {errc}")
-
except requests.exceptions.Timeout as errt:
-
print(f"Timeout Error: {errt}")
-
except requests.exceptions.RequestException aserr:
-
print(f"Error: {err}")
-
else:
-
print(f"Status Code: {response.status_code}")
-
print("Response Content:")
-
print(response.text)
在这个例子中,我们使用了 response.raise_for_status() 来检查是否有错误的响应码,并通过异常处理机制来捕获不同类型的异常。
09 使用 Session 进行持久性连接
requests 的 Session 对象允许你保持一个持久性连接,这对于执行多个相关请求非常有用,比如在登录之后执行其他操作
-
import requests
-
url = 'https://www.example.com'
-
login_data = {'username': 'user', 'password': 'pass'}
-
# 创建一个 Session 对象
-
with requests.Session() as session:
-
# 登录
-
session.post('https://www.example.com/login', data=login_data)
-
# 使用同一个 Session 对象进行后续请求
-
response = session.get(url)
-
print(f"Status Code: {response.status_code}")
-
print("Response Content:")
-
print(response.text)
在这个例子中,我们使用 requests.Session() 创建了一个 Session 对象,并在登录后的请求中使用了相同 的 Session 对象
最后我邀请你进入我们的【软件测试学习交流群:1007119548】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路
作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:程序员雨果】自提!