使用Zenhub API将Github Issue转为Epic时遇参数错误问题
解决Zenhub API关联Issue到Epic时的400错误问题
我之前也踩过Zenhub API这个坑!你遇到的400错误根本不是字段名的问题,而是请求数据的格式不对——你现在用data=params传递字典参数,requests会默认把它编码成application/x-www-form-urlencoded的表单格式,但Zenhub的API要求接收的是JSON格式的请求体,所以才会抛出“无效字段”的错误。
问题根源
当你传递params = {"issues": [{"repo_id": 280565, "issue_number": 17}]}给data参数时,requests会把它转换成这样的扁平表单数据:
issues=repo_id&issues=issue_number
这种格式完全不符合Zenhub API期望的嵌套JSON结构,自然会被判定为无效字段。
修正后的代码
你只需要把参数通过json参数传递(或者手动序列化JSON并设置正确请求头),就能解决这个问题:
1. 转换Issue为Epic并关联Issue
import requests zenhub_headers = { "X-Authentication-Token": "%s" % token, "Content-Type": "application/json" # 用json参数时requests会自动添加,显式指定也可 } target_zh_issues_url = '%s/p1/repositories/%d/issues' % (zh_api_endpoint, target_repo_id) params = {"issues": [{"repo_id": 280565, "issue_number": 17}]} # 使用json参数传递,requests会自动处理JSON序列化和请求头 response = requests.post( f"{target_zh_issues_url}/{issue}/convert_to_epic", headers=zenhub_headers, json=params )
2. 给已存在的Epic添加关联Issue
target_zh_epics_url = '%s/p1/repositories/%d/epics' % (zh_api_endpoint, target_repo_id) params = {"add_issues": [{"repo_id": 280565, "issue_number": 17}]} response = requests.post( f"{target_zh_epics_url}/{issue}/update_issues", headers=zenhub_headers, json=params )
额外验证点
如果还是报错,可以检查这几点:
- 确认你的
token有足够权限操作目标仓库的Epic - 确认
repo_id和issue_number对应的仓库和Issue真实存在 - 检查API端点
zh_api_endpoint是否为正确的地址(比如https://api.zenhub.com)
内容的提问来源于stack exchange,提问作者KineticSquid
相关产品推荐
相关产品推荐

