当前位置: 首页 > news >正文

使用python调用JIRA6 REST API及遇到的问题

JIRA认证方式简述

JIRA接口调用有两种认证方式访问Jira Rest API,基本认证⽅式(⽤户名和密码)和OAuth1认证方式。

基本认证⽅式:因为⽤户名和密码会被浏览器重复地请求和发送,即使采⽤ SSL/TLS 发送,也会有安全隐患,因此不建议使⽤。 
OAuth 认证⽅式: OAuth 是⼀种认证协议,允许Jira⽤户(Resource Owner) 授权第三⽅应⽤访问他们能操作的Jira 内容,Jira 使⽤ OAuth 1.0a版本。

java方式使用的依赖包

以前写的java的方式是通过google的oauth-client实现的。

<dependency><groupId>com.google.oauth-client</groupId><artifactId>google-oauth-client</artifactId><version>1.22.0</version>
</dependency>

python代码示例

之前用Java程序调用过JIRA接口,这次改成python调用接口,发现跟java程序有些不一样,同样的凭证,通过java访问JIRA接口没有问题,但是使用python时就会出现一些问题。

下面是调通后没有问题的代码

import requests
from requests_oauthlib import OAuth1# 配置 OAuth 信息
# 替换为你的 JIRA 服务器地址
JIRA_BASE_URL = "https://jira.example.com"
# 在 JIRA 应用链接中配置的 Consumer Key
CONSUMER_KEY = "your_consumer_key"
# 私钥,对应的公钥是配置在JIRA中的
PRIVATE_KEY = """
-----BEGIN RSA PRIVATE KEY-----
<your_private_key_here>
-----END RSA PRIVATE KEY-----
"""
# 在获取 Access Token中,根据生成的链接,获取到的secret
CLIENT_SECRET = "your_consumer_secret"
# 从 JIRA 获取的 Access Token
ACCESS_TOKEN = "your_access_token"
# 从 JIRA 获取的 Access Token Secret
ACCESS_TOKEN_SECRET = "your_access_secret" # 创建 OAuth1 对象,这块比较重要,主要是这里的参数跟java程序有些不同
oauth = OAuth1(client_key=CONSUMER_KEY,rsa_key=PRIVATE_KEY,client_secret=CLIENT_SECRETresource_owner_key=ACCESS_TOKEN,resource_owner_secret=ACCESS_TOKEN_SECRET,signature_method="RSA-SHA1"
)# 调用 JIRA REST API 示例:获取问题详情
# 替换为实际的 Issue Key
issue_key = "TEST-123"
# 最终请求的URL
url = f"{JIRA_BASE_URL}/rest/api/2/issue/{issue_key}"# 发起请求
response = requests.get(url, auth=oauth)# 处理响应
if response.status_code == 200:print("Issue Details:", response.json())
else:print(f"Failed to fetch issue. Status Code: {response.status_code}")print("Response:", response.text)

遇到的问题及解决方式

ModuleNotFoundError: No module named 'jwt'

ModuleNotFoundError: No module named 'jwt' 错误表明你的 Python 环境中没有安装 jwt 模块。这个模块通常是 PyJWT,它用于处理 JSON Web Token (JWT) 的生成和验证。

安装PyJWT

pip install PyJWT

验证安装

python -c "import jwt; print(jwt.__version__)"

如果没有报错,说明安装成功,并会打印 PyJWT 的版本号。

jwt.exceptions.InvalidKeyError:cound not parse th provided public key

这也是让我最困惑的问题,public key不是在客户端的,是在JIRA中配置的,但是却提示public key有问题,但是我通过java程序去访问是成功的,所以JIRA中配置的应该也没有问题。

密钥内容应该没有问题,所以我就检查了密钥的格式。

这也是python跟java不一样的,我在java中,就是将RSA私钥作为一个字符串使用是没有问题的,所以也习惯的在python中使用字符串使用,结果就出问题了。

检查公钥的格式

确保公钥的格式正确,通常公钥以 PEM 格式存储,包含以下内容:

-----BEGIN PUBLIC KEY-----
<base64_encoded_key>
-----END PUBLIC KEY-----

检查点

  • 公钥需要完整,包括 -----BEGIN PUBLIC KEY----------END PUBLIC KEY----- 标志。
  • 中间的内容应为 Base64 编码的公钥。

如果没有这些标志,尝试手动添加。

signature_method_rejected

signature_method_rejected 错误表明 JIRA 不接受你在 OAuth1 请求中指定的签名方法。这通常是由于以下原因之一导致的:

  • 签名方法配置不正确(JIRA 只支持 RSA-SHA1)。
  • JIRA 中的应用链接未正确配置。
  • 使用了不匹配的密钥对,或者密钥格式错误。

这也是python方式跟java方式另外一个不同的地方,在python中生成OAuth1对象时,必须指定signature_method="RSA-SHA1"

AttributeError: module 'jwt.algorithms' has no attribute 'hashes'

可能由于一下原因导致:

  • 没有安装cryptography
  • jwt和PyJWT同时存在引起冲突

安装 cryptography

pip install -U cryptography

解决冲突

# jwt卸载
pip uninstall jwt
# 保险起见,将PyJWT一同卸载
pip uninstall PyJWT
# 重新安装PyJWT
pip install PyJWT

 

报没有权限,必须登录

这又是一个让我很莫名奇妙的问题,用java都是可以了,用python就说没有权限,必须登录,难道让我使用基本认证方式。

想到了client_secret这个参数,因为这个凭证在java中是用到的,但是在网上找的示例中都没有提示用这个参数,然后就尝试在生成OAuth1对象时加上这个,结果成功了。

client_secret=CLIENT_SECRET

相关文章:

使用python调用JIRA6 REST API及遇到的问题

JIRA认证方式简述 JIRA接口调用有两种认证方式访问Jira Rest API&#xff0c;基本认证⽅式(⽤户名和密码)和OAuth1认证方式。 基本认证⽅式&#xff1a;因为⽤户名和密码会被浏览器重复地请求和发送&#xff0c;即使采⽤ SSL/TLS 发送&#xff0c;也会有安全隐患&#xff0c;…...

基于STM32的智能电表可视化设计:ESP8266、AT指令集、python后端Flask(代码示例)

一、项目概述 随着智能家居的普及&#xff0c;智能电表作为家庭用电管理的重要工具&#xff0c;能够实时监测电流、电压及功率&#xff0c;并将数据传输至后台进行分析和可视化。本项目以STM32C8T6为核心&#xff0c;结合交流电压电流监测模块、ESP8266 Wi-Fi模块、OLED显示屏…...

图片和短信验证码(头条项目-06)

1 图形验证码接口设计 将后端⽣成的图⽚验证码存储在redis数据库2号库。 结构&#xff1a; {img_uuid:0594} 1.1 创建验证码⼦应⽤ $ cd apps $ python ../../manage.py startapp verifications # 注册新应⽤ INSTALLED_APPS [django.contrib.admin,django.contrib.auth,…...

2501,wtl显示html

原文 在MFC程序中有专门封装的CHTMLView来显示超文本文件,如果在对话框中显示网页可用CDHTMLDialog,甚至可实现多页超文本向导风格的对话框,但是在WTL中却没有单独封装超文本的对应控件,这是因为COM组件的使用和编写本来就是ATL的强项,WTL扩展的是ATL欠缺的桌面应用的功能部分…...

嵌入式C语言:什么是指针?

目录 一、指针的基本概念 1.1. 定义指针 1.2. 赋值给指针 1.3. 解引用指针 1.4. 指针运算 1.5. 空指针 1.6. 函数参数 1.7. 数组和指针 1.8. 示例代码 二、指针在内存中的表示 2.1. 内存地址存储 2.2. 内存模型 2.3. 指针与硬件交互 2.4. 示例代码 三 、指针的重…...

解锁 KaiwuDB 数据库工程师,开启进阶之路

解锁 KaiwuDB 数据库工程师试题,开启进阶之路 一、KaiwuDB 数据库全方位洞察 (一)核心特性深度解析 原生分布式架构:摒弃传统集中式存储的局限,KaiwuDB 采用原生分布式架构,将数据分散存于多个节点。这不仅能有效避免单点故障风险,保障数据的高可用性,还能凭借并行处…...

ffmpeg7.0 aac转pcm

#pragma once #define __STDC_CONSTANT_MACROS #define _CRT_SECURE_NO_WARNINGSextern "C" { #include "libavcodec/avcodec.h" }//缓冲区大小&#xff08;缓存5帧数据&#xff09; #define AUDIO_INBUF_SIZE 40960 /*name depthu8 8s16 …...

【Pandas】pandas Series rdiv

Pandas2.2 Series Binary operator functions 方法描述Series.add()用于对两个 Series 进行逐元素加法运算Series.sub()用于对两个 Series 进行逐元素减法运算Series.mul()用于对两个 Series 进行逐元素乘法运算Series.div()用于对两个 Series 进行逐元素除法运算Series.true…...

线程安全问题介绍

文章目录 **什么是线程安全&#xff1f;****为什么会出现线程安全问题&#xff1f;****线程安全问题的常见场景****如何解决线程安全问题&#xff1f;**1. **使用锁**2. **使用线程安全的数据结构**3. **原子操作**4. **使用volatile关键字**5. **线程本地存储**6. **避免死锁*…...

为AI聊天工具添加一个知识系统 之27 支持边缘计算设备的资源存储库及管理器

本文问题 现在我们回到 ONE/TWO/TREE 的资源存储库 的设计--用来指导 足以 支持 本项目&#xff08;为AI聊天工具增加一套知识系统&#xff09;的 核心能力 “语言处理” 中 最高难度系数的“自然语言处理” 中最具挑战性的“含糊性” 问题的解决。--因为足以解决 自然语言中最…...

初识verilog HDL

为什么选择用Verilog HDL开发FPGA&#xff1f;&#xff1f;&#xff1f; 硬件描述语言&#xff08;Hardware Descriptipon Lagnuage&#xff0c;HDL&#xff09;通过硬件的方式来产生与之对应的真实的硬件电路&#xff0c;最终实现所设计的预期功能&#xff0c;其设计方法与软件…...

VS2015 + OpenCV + OnnxRuntime-Cpp + YOLOv8 部署

近期有个工作需求是进行 YOLOv8 模型的 C 部署&#xff0c;部署环境如下 系统&#xff1a;WindowsIDE&#xff1a;VS2015语言&#xff1a;COpenCV 4.5.0OnnxRuntime 1.15.1 0. 预训练模型保存为 .onnx 格式 假设已经有使用 ultralytics 库训练并保存为 .pt 格式的 YOLOv8 模型…...

Notepad++上NppFTP插件的安装和使用教程

一、NppFTP插件下载 图示是已经安装好了插件。 在搜索框里面搜NppFTP&#xff0c;一般情况下&#xff0c;自带的下载地址容易下载失败。这里准备了一个下载连接&#xff1a;Release v0.29.10 ashkulz/NppFTP GitHub 这里我下载的是x86版本 下载好后在nodepad的插件里面选择打…...

Kotlin | Android Provider 的实现案例

目标 使用 Android Room 实现持久化库。 代码 Kotlin 代码编写 DemoDatabase&#xff0c;在build生成 DemoDatabase_Impl 疑问 Provider的数据会存在设备吗&#xff1f; 内部存储: 当使用 Room 创建数据库&#xff08;如 DemoDatabase&#xff09;&#xff0c;数据库文件通常…...

频域自适应空洞卷积FADC详解

定义与原理 在探讨FADC的核心策略之前,我们需要深入了解其定义和工作原理。FADC是一种创新性的卷积技术,旨在克服传统空洞卷积的局限性。其核心思想是从 频谱分析的角度 改进空洞卷积,通过 动态调整膨胀率 来平衡有效带宽和感受野大小。 FADC的工作原理可以从以下几个方面…...

Edge浏览器内置的截长图功能

Edge浏览器内置截图功能 近年来&#xff0c;Edge浏览器不断更新和完善&#xff0c;也提供了长截图功能。在Edge中&#xff0c;只需点击右上角的“...”&#xff0c;然后选择“网页捕获”->“捕获整页”&#xff0c;即可实现长截图。这一功能的简单易用&#xff0c;使其成为…...

GAN的应用

5、GAN的应用 ​ GANs是一个强大的生成模型&#xff0c;它可以使用随机向量生成逼真的样本。我们既不需要知道明确的真实数据分布&#xff0c;也不需要任何数学假设。这些优点使得GANs被广泛应用于图像处理、计算机视觉、序列数据等领域。上图是基于GANs的实际应用场景对不同G…...

Math Reference Notes: 希腊字母表

希腊字母&#xff08;Greek alphabet&#xff09;是古希腊语使用的字母系统&#xff0c;也是西方字母系统的先驱之一&#xff0c;广泛应用于现代数学、物理学、工程学以及各种科学领域。希腊字母有24个字母&#xff0c;它们分为大写和小写两种形式。 1. Alpha (Α, α) 发音&a…...

高通,联发科(MTK)等手机平台调优汇总

一、常见手机型号介绍&#xff1a; ISP除了用在安防行业&#xff0c;还有手机市场&#xff0c;以及目前新型的A/VR眼睛&#xff0c;机器3D视觉机器人&#xff0c;医疗内窥镜这些行业。 下面是一些最近几年发布的,,,旗舰SOC型号&#xff1a; 1.联发科&#xff1a;天玑92…...

Rust语言使用iced实现简单GUI页面

使用cargo新建一个rust项目 cargo new gui_demo cd gui_demo 编辑Cargo.toml文件 ,添加iced依赖 [package] name "gui_demo" version "0.1.0" edition "2021"[dependencies] iced "0.4.2" 编辑src/main.rs文件&#xff1a; u…...

使用wav2vec 2.0进行音位分类任务的研究总结

使用wav2vec 2.0进行音位分类任务的研究总结 原文名称&#xff1a; Using wav2vec 2.0 for phonetic classification tasks: methodological aspects 研究背景 自监督学习在语音中的应用 自监督学习在自动语音识别任务中表现出色&#xff0c;例如说话人识别和验证。变换器模型…...

25/1/11 嵌入式笔记<esp32> 初入esp32

用Arduino平台&#xff0c;学习了点亮led灯。 //定义LED引脚 int led_pin 12&#xff1b;void setup() {//设定引脚为输出模式pinMode(led_pin,OUTPUT):}void loop() {// 点亮LED:digitalWrite(led_pin,HIGH);//延时1sdelay(1000);//熄灭LEDdigitalWrite(led_pin,LOW)://延时…...

基于SMT32U575RIT单片机-中断练习

任务 查看手册对所有的拓展板上和相对应的底板的引脚对应的端口找到以下结论 通过STM32MX软件对各个引脚进行相应的配置 1.第一种切换模式电脑发送 #include "main.h" #include "icache.h" #include "usart.h" #include "gpio.h"/*…...

在Django的Serializer的列表数据中剔除指定元素

【Python工作随笔】 提问 如何在List序列化方法中剔除不要的元素&#xff0c;例如在成绩中剔除0 class BasicDescriptionSubjectBoxPlotSerializer(serializers.Serializer):语文 serializers.ListField(sourcescore_chinese)数学 serializers.ListField(sourcescore_math…...

我喜欢的数学题

偏向抖机灵性质的&#xff0c;考察理解的&#xff0c;而不是比拼计算量的&#xff0c;可能跟现在岁数大了算不明白了多少有点关系吧。 高高手&#xff0c;别太重计算&#xff0c;给普通孩子留条路。就算将来真的理工治国&#xff0c;也没必要都往人形计算机方面引导。毕竟你未来…...

Redis解决热key问题

当Redis遇到热key问题时&#xff0c;即某个或某些key被频繁访问&#xff0c;可能导致单个Redis节点负载过高&#xff0c;影响整个系统性能。以下是一些常见的解决方案&#xff1a; 1. 缓存预热与复制 缓存预热&#xff1a;在系统启动阶段&#xff0c;将热key对应的value预先加…...

【git】-2 分支管理

目录 一、分支的概念 二、查看、创建、切换分支 1、查看分支-git branch 2、创建分支- git branch 分支名 3、切换分支- git checkout 分支名 三、git指针 -实现分支和版本间的切换 四、普通合并分支 git merge 文件名 五、冲突分支合并 ​​​​​​【git】-初始gi…...

Win11+WLS Ubuntu 鸿蒙开发环境搭建(二)

参考文章 penHarmony南向开发笔记&#xff08;一&#xff09;开发环境搭建 OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——标准系统移植指南&#xff08;一&#xff09; OpenHarmony&#xff08;鸿蒙南向开发&#xff09;——小型系统芯片移植指南&#xff08;二&…...

Meilisearch ASP.Net Core API 功能demo

安装 MeiliSearch 0.15.5 0.15.5demo code using Meilisearch; using System.Data; using System.Text.Json; using System.Text.Json.Serialization;namespace MeiliSearchAPI {public class MeilisearchHelper{public MeilisearchHelper(){DefaultClient…...

程序员独立开发竞品分析:确定网站使用什么建站系统

要确定一个网站使用的建站系统&#xff0c;可以通过以下几种方法尝试分析&#xff1a; 查看页面源代码&#xff1a; 打开网站&#xff0c;右键点击页面并选择“查看页面源代码”。在代码中查找一些常见的建站系统标志&#xff0c;例如&#xff1a; WordPress 的迹象&#xff1a…...

莆田哪里有做网站的/如何进行搜索引擎优化

不敢发首页&#xff0c;放在家里纯属观摩 上回&#xff1a;博客园的故事&#xff0d;愤怒时的呐喊 上回说到&#xff0c;摩登女郎并不安分&#xff0c;偶尔制造“门事件”扩大影响&#xff0c;一时和尚门看到也颇感新鲜&#xff0c;竞相传阅&#xff0c;一时不亦乐乎&#xf…...

黑龙江企业网站建设公司/网络营销课程大概学什么内容

生产环境中微服务的发布是非常频繁的&#xff0c;对于一些互联网型的项目&#xff0c;甚至在你与他人谈话闲聊的几分钟内便有新的版本发布出来&#xff1b;一般的&#xff0c;每发布一个新的微服务&#xff0c;网关就可能需要为新发布的微服务定义对应的访问路由&#xff0c;如…...

建小公司网站/中国足球世界排名

本节书摘来自异步社区《Android安全技术揭秘与防范》一书中的第2章&#xff0c;第2.2节安全的发展趋势&#xff0c;作者 周圣韬&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 2.2 安全的发展趋势截至2014年8月&#xff0c;中国移动用户达到12.67亿&#xf…...

草莓网是b2b吗/搜索引擎优化怎么做的

考虑这个y(x)函数&#xff1a;我们可以在文件中生成这些分散的点&#xff1a;dataset_1D.dat&#xff1a;# x y0 01 12 03 -94 -32以下是这些点的一维插值代码&#xff1a;加载这些分散的点创建x_mesh执行1D插值代码&#xff1a;^{pr2}$图中显示了以下内容&#xff1a;现在&…...

昆明网站建设一条龙服务/百度推广多少钱

Mac 通过终端CD命令快速定位到指定文件夹 1、打开终端2、输入cd3、将想要到达的文件夹拖进终端&#xff0c;点击回车&#xff0c;就到了指定的文件夹了 phonegap下载地址&#xff1a;http://phonegap.com/install/ OK下载到zip包&#xff0c;首先我们解压一下&#xff0c;通过…...

响应式网站 手机版/如何创建一个个人网站

都说磨刀不误砍柴工&#xff0c;同样学习跟磨刀一样&#xff0c;亦是同样道理。成功都是需要厚积薄发。今天来学习一下Excel表格如何忽略隐藏行或是忽略隐藏列进行求和。一、忽略隐藏行求和例如&#xff0c;以下表格&#xff1a;平时看到这么一个表格&#xff0c;需要给产品汇总…...