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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:54:01