Python调用Jira Rest API返回含HTML标签无效字符串的问题咨询
问题解答
1. 身份认证相关
你当前使用「邮箱+API Token」做Base64编码放入Authorization请求头的鉴权方式符合Jira的Basic认证规范,不需要额外提供用户名和密码。
2. 接口返回HTML的根本原因
你当前请求的URL是Jira前端敏捷看板的页面地址(后缀为.jspa是服务端渲染的前端页面路由),并非Jira Rest API的官方接口地址,所以返回的本来就是浏览器渲染用的HTML内容,自然无法解析为JSON。
3. 修正方案
请将请求地址替换为Jira官方Rest API端点,若你需要获取指定项目下的Issue列表,可使用搜索接口,示例修正代码如下:
import base64 import os import requests import json os.environ["HTTPS_PROXY"] = "XXXX" # 鉴权逻辑保持不变 cred = "Basic " + base64.b64encode(b'XXX@bk.de:XXXX').decode("utf-8") headers = { "Accept": "application/json", "Content-Type": "application/json", "Authorization" : cred } projectKey = "TEST" # 替换为Rest API接口地址,此处示例为v3版本搜索接口,v2版本将路径中的3改为2即可 url = "https://jira-test.net/rest/api/3/search" # 配置查询参数,可根据需求添加字段过滤、分页参数 params = { "jql": f"project = {projectKey}", "maxResults": 100, # 单次请求最大返回条目,默认最多1000,需分页获取全量数据 "fields": "id,key,issuetype,created,creator,status,summary" # 只返回需要的字段,减少响应体积 } response = requests.request( "GET", url, headers=headers, params=params ) # 先校验响应状态,避免解析报错 if response.status_code == 200: json_data = json.loads(response.text) for item in json_data["issues"]: print(item["id"] + "\t" + item["key"] + "\t" + item["fields"]["issuetype"]["name"] + "\t" + item["fields"]["created"]+ "\t" + item["fields"]["creator"]["displayName"] + "\t" + item["fields"]["status"]["name"] + "\t" + item["fields"]["summary"] + "\t" ) else: print(f"请求失败,状态码:{response.status_code},错误信息:{response.text}")
4. 其他注意事项
- 如果需要获取全量数据,需要通过
startAt参数循环分页请求,单次请求最多返回1000条结果 - 如果你使用的是本地部署的Jira Server/Data Center版本,确认管理员已开启API Token认证权限,部分旧版本需要使用「用户名+密码」做Basic认证,直接把编码的内容替换为
用户名:密码即可
内容的提问来源于stack exchange,提问作者Marcus
相关产品推荐
相关产品推荐

