You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Microsoft Graph Planner API Patch接口时出现冲突报错

解决Microsoft Graph Planner Patch任务时的冲突错误

问题描述

调用Microsoft Graph Planner API的Patch接口修改任务标题时,报错:

The attempted changes conflicted with already accepted changes. Read the latest state and resolve differences.

Postman中先执行Get任务接口再执行Update接口可正常运行,但Python中分开运行Get和Patch脚本(或手动用Postman获取ETag后在Python中使用)仍报错。

错误原因分析

  1. Authorization头格式错误:Python代码中Authorization头直接使用access_token,缺少Bearer 前缀,而Postman会自动添加该前缀,导致请求身份验证逻辑异常。
  2. ETag使用不当:
    • 手动复制ETag时可能遗漏外层双引号,或者ETag在复制过程中已过期(任务状态被其他操作修改)。
    • 分开运行Get和Patch脚本时,两次请求间隔内任务可能被其他操作更新,导致ETag失效。
  3. ETag提取错误:Get接口返回的ETag在响应头的ETag字段中,而非响应体里,若从响应体提取会导致获取错误的ETag值。

解决方案

1. 修正Authorization头格式

在请求头中,Authorization的值必须是Bearer {access_token},补充前缀后才能正确通过身份验证。

2. 合并Get和Patch流程,自动获取并使用ETag

将获取任务和修改任务的逻辑合并到一个脚本中,自动从Get接口的响应头提取最新ETag,避免手动复制的错误和ETag过期问题。

修正后的完整代码:

import requests

access_token = '你的access_token'
task_id = '你的任务ID'

# Step 1: 获取任务最新状态及ETag
get_url = f'https://graph.microsoft.com/v1.0/planner/tasks/{task_id}'
get_headers = {
    'Authorization': f'Bearer {access_token}'
}
get_response = requests.get(url=get_url, headers=get_headers)
get_response.raise_for_status()  # 捕获请求错误

# 从响应头提取ETag
task_etag = get_response.headers.get('ETag')
if not task_etag:
    print("无法获取任务ETag")
    exit()

# Step 2: 使用最新ETag执行Patch修改
patch_url = f'https://graph.microsoft.com/v1.0/planner/tasks/{task_id}'
patch_headers = {
    'Authorization': f'Bearer {access_token}',
    'If-Match': task_etag
}
patch_data = {
    "title": "test"
}

patch_response = requests.patch(url=patch_url, headers=patch_headers, json=patch_data)
print(patch_response.text)

3. 分开运行脚本时的注意事项

如果必须分开运行,需确保:

  • 从Get接口的响应头中复制完整的ETag值(包括外层双引号),例如"W/\"JzEtVGFzayAgQEBAQEBAQEBAQEBAQEBAWCc=\""。
  • 复制ETag后立即执行Patch脚本,避免期间任务被其他操作修改。
  • 确认Authorization头已添加Bearer 前缀。

内容的提问来源于stack exchange,提问作者Hajaro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:55:14