python搭建webapi

requests模块在Python的urllib库基础上进行了高度封装,使得进行网络请求更加简洁和人性化。requests模块不仅支持HTTP连接保持和连接池,还支持cookie会话保持、文件上传、自动响应内容编码以及国际化的URL和POST数据自动编码等功能。
要使用requests模块,需要先进行安装,可以通过pip命令进行安装:
pip install requests
requests支持多种请求方式,包括GET、POST、PUT、DELETE、HEAD、OPTIONS等。其中,GET和POST是最常用的请求方式。我们可以定义一个方法来执行简单的API请求:
python
import requests
import json
def web_api_request(method, url, params):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"Accept": "application/json",
"Connection": "keep-alive"
}
if method == 'get':
try:
response = requests.get(url, params=params, headers=headers, timeout=60)
except requests.Timeout:
response = "请求超时"
elif method == 'post':
response = requests.post(url, data=params, headers=headers, timeout=60)
else:
return {"error": "只支持GET和POST请求"}
if response.status_code == 200:
try:
return json.loads(response.text) if response.json() else response.text
except json.JSONDecodeError:
return response.text
else:
return response.status_code, response.text
使用示例:
api_url = "/api/user"
params = {"id": 123, "name": "example"}
result = web_api_request("get", api_url, params) 使用GET方式请求API
print(result)
对于需要先登录才能调用的API接口,我们可以使用session来保存状态。下面是一个实现示例:
python
import requests
def api_with_login(login_url, api_url):
session = requests.Session() 创建session对象用于保持会话状态
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124",
"Accept": "application/json"
}
session.get(login_url, headers=headers) 登录操作,获取cookie等信息保存在session中
response = session.get(api_url, headers=headers) 使用session发起API请求,不需要再次登录验证身份。返回的response包含请求结果信息。可以将response的结果进行解析获取到实际内容。例如使用response.json()获取JSON格式的数据。返回的数据格式根据实际的API返回的数据格式而定。返回的数据可能是字典或字符串格式或其他数据类型的数据等。具体操作可根据API提供的接口文档说明来实现数据处理等相关的逻辑。最后将获取的结果处理完毕后返回即可。需要注意的是,使用session时需要注意处理异常情况和响应状态码等,确保程序的健壮性。同时还需要注意保护API密钥等信息的安全,避免信息和滥用风险等问题发生。后期将会详细介绍如何使用requests模块上传文件等更多高级功能的应用。可以通过了解requests模块支持的更多参数和选项以及应用场景扩展来更深入地学习和掌握该模块的使用方法和技巧。这些知识和技巧对于自动化测试和数据采集等场景下的网络请求处理非常有帮助和实用。使用requests模块可以大大提高开发效率和代码质量,让网络请求变得更加简单和高效。
