Python无法通过以下方式连接Jira API

Posted

技术标签:

【中文标题】Python无法通过以下方式连接Jira API【英文标题】:Python Can't connect Jira API via 【发布时间】:2019-04-29 01:30:39 【问题描述】:

我正在尝试通过 python (3.6) 连接 jira 的 API,但我不断收到错误消息:

警告:root:HTTPSConnectionPool(host='jira', port=443):最大重试次数超出了 url:/secure/rest/api/2/serverInfo/rest/api/2/serverInfo(由 SSLError(SSLError (“糟糕的握手:错误([('SSL例程','tls_process_server_certificate','证书验证失败')],)”,),))同时做GET https://jira/secure/rest/api/2/ serverInfo/rest/api/2/serverInfo ['params': None, 'headers': 'User-Agent': 'python-requests/2.20.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/json,.;q=0.9', 'Connection': 'keep-alive', 'Cache-Control': 'no-cache', 'Content-Type' : 'application/json', 'X-Atlassian-Token': '无检查'] WARNING:root:Got ConnectionError [HTTPSConnectionPool(host='jira', port=443): Max retries exceeded with url: /secure/rest/api/2/serverInfo/rest/api/2/serverInfo (由 SSLError(SSLError (“糟糕的握手:错误([('SSL例程','tls_process_server_certificate','证书验证失败')],)”,),))]错误:在GET https://jira/secure/rest/api上没有/2/serverInfo/rest/api/2/serverInfo 'response':无,'request':'response':无,'request': 警告:root:从 GET https://jira/secure/rest/api/2/serverInfo/rest/api/2/serverInfo 获得可恢复错误,将在 7.466325591185807s 中重试 [1/3]。错误:HTTPSConnectionPool(主机='jira',端口=443):最大重试次数超出了 url:/secure/rest/api/2/serverInfo/rest/api/2/serverInfo(由 SSLError(SSLError(“糟糕的握手: Error([('SSL 例程', 'tls_process_server_certificate', '证书验证失败')],)",),))

这是我的代码:

un='myusername'
pwd='mypassword'
server='https://jira/xxxx'

jira = jira = JIRA(basic_auth=(un, pwd), options='server': server)
issue = jira.issue('some issue name')

print(issue.fields.project.key)
print(issue.fields.issuetype.name) 

在同一台服务器上使用 curl 时一切正常。

【问题讨论】:

Bad SSL handshake 告诉你 SSL 证书验证失败.. 感谢您的回答,我注意到了这一点,但我正在使用 CURL 进行验证,没关系,只是通过 Python 使用 JIRA MODULE 会给出该错误......有什么想法吗? 您可以为验证选项提供必要的证书,如下面我的回答中所述。 任何成功或者您对该主题还有其他问题吗? 还是同样的错误信息,我将 jira 证书保存到文件并添加了您的行,这真的很奇怪,因为当我使用“请求”时,我能够连接。 【参考方案1】:

您可以向verify 选项提供必要的证书。

jira-pythonRequests 用于 HTTP(docs)。

根据Requests documentation 您可以在verify 中指定证书文件的路径。 所以你可以像这样在verify 中提供根证书:

jira_options = 
   'server': jira_server_name,
   'verify': 'path/to/root/certificate',

因此,在您的情况下,只需更改为:

jira = jira = JIRA(basic_auth=(un, pwd), options='server': server,'verify': 'path/to/root/certificate',)

例如,在 Chrome 中,您可以显示此 article 中所述的证书

编辑:

在 Chrome 中连接到您的服务器并单击地址栏左角显示的锁并右键单击该锁(见下图),然后单击“详细信息”,然后单击“查看证书”。然后将此证书保存到文件并在verify 中引用它。

正如@Snow 在下面的 cmets 中提到的那样,另一种方法是通过 F12 打开开发工具,然后导航到安全选项卡。

来自文档:

SSL 证书验证:

如果 verify 设置为目录的路径,则必须使用 OpenSSL 提供的 c_rehash 实用程序处理该目录。

客户方证书:

本地证书的私钥必须未加密。目前,Requests 不支持使用加密密钥。

还有设置'verify':false 的选项 - 不建议这样做,因为关闭证书验证会使您容易受到Man-in-the-Middle attacks 的攻击。

【讨论】:

我找不到你提到的这个锁定按钮。它到底在哪里? @Snow 我在我的答案中添加了一张图片,该图片应该阐明地址栏中所述锁的位置.. 谢谢,我设法通过开发者工具 --> 安全选项卡获得了它。虽然你的看起来更快。 @Snow 是的 - 通过F12 的开发工具也可以工作,但右键单击锁只需一两步;)谢谢您的评论 - 让我将您的方式添加到我的也回答;)【参考方案2】:

只需安装“python-certifi-win32”,SSL 错误就为我清除了。我没有提供任何证书或任何东西。

【讨论】:

以上是关于Python无法通过以下方式连接Jira API的主要内容,如果未能解决你的问题,请参考以下文章

Python操作Jira

JIRA 休息 API 错误。无法识别的令牌创建问题

Python Jira Rest Api 代码生成无效字符串

不允许通过 REST api 和 jquery 405 方法创建 Jira 问题

[转] VMware中的Ubuntu无法通过桥接方式上网

Jira API 帮助 C# HttpClient