如何用Python Requests在POST请求前检测API中标题是否存在?
解决方案
首先你需要确认目标API提供的查询端点(通常和上传端点不是同一个,比如可能是GET /api/check-title或者GET /api/items这类),如果没有API文档,你可以尝试通过查询参数传递标题(或标题关键词)来发起GET请求,而非完整payload。
具体实现步骤
- 编写检测标题是否存在的函数,仅传递标题相关的查询参数,无需携带文件和其他payload字段
- 根据API返回结果判断是否存在匹配项
- 仅当目标标题不存在时,执行原有的POST上传逻辑
代码示例
import requests def is_title_exists(api_key, check_url, target_title): headers = { 'Authorization': api_key } # 用查询参数传递标题,支持精确匹配或模糊匹配(取决于API支持的参数名) # 若API支持模糊查询,可修改参数名,比如'title_like'/'title_contains' params = { 'title': target_title # 模糊查询示例:'title_contains': target_title[:10] # 传递标题前10位作为关键词 } response = requests.get(check_url, headers=headers, params=params) # 根据API返回结构判断,假设响应是JSON数组 if response.status_code == 200: items = response.json() # 精确匹配标题 for item in items: if item.get('title') == target_title: return True # 模糊匹配(可选) # for item in items: # if target_title in item.get('title', ''): # return True return False # 原有上传逻辑 def upload_data(api_key, upload_url, file_path, target_title): headers = { 'Authorization': api_key } # 用with语句自动管理文件资源 with open(file_path, 'rb') as f: files = { 'file_input': f, } payload = { 'title': target_title, 'type': 3 } response = requests.post(upload_url, files=files, headers=headers, data=payload) print(f"上传状态码: {response.status_code}") return response # 主执行逻辑 if __name__ == "__main__": API_KEY = "your_api_key_here" CHECK_URL = "https://example.com/api/check-title" # 替换为实际查询端点 UPLOAD_URL = "https://example.com/api/upload" # 原上传端点 FILE_PATH = "your_file.txt" TARGET_TITLE = "your_target_title" if not is_title_exists(API_KEY, CHECK_URL, TARGET_TITLE): print("标题不存在,开始上传...") upload_data(API_KEY, UPLOAD_URL, FILE_PATH, TARGET_TITLE) else: print("标题已存在,跳过上传")
注意事项
- 替换
CHECK_URL为实际的API查询端点,若不确定,可抓包查看网站前端查询标题时调用的接口 - 若API的模糊查询参数不是
title_contains,需根据API实际规则调整参数名(部分API用q作为通用搜索关键词参数) - 使用
with open管理文件,避免资源泄漏
内容的提问来源于stack exchange,提问作者Rose
相关产品推荐
相关产品推荐

