使用jira-python 0.25创建问题时出现E405错误

1 投票
1 回答
563 浏览
提问于 2025-04-18 09:48

我已经使用jira-python一段时间了,但到目前为止一直只是用来查询。现在我需要从一个Python脚本创建一个新问题,但这对我来说不太奏效。

无论我怎么做,我总是收到一个E405(方法不被允许的错误)。但这绝对不是权限问题。

为了找出问题所在,我手动使用curl发送了POST命令。没问题,一切正常,问题也创建成功了。

所以,我猜我的代码在设置create_issue的参数时出了错。我进入了ipython,启用了pdb调试,并尝试了create_issue()调用。果然,我在jira-python库中遇到了一个异常。从raise_on_error往上看,情况是这样的:

    500         url = self._get_url('issue')
    501         r = self._session.post(url, headers={'content-type': 'application/json'}, data=json.dumps(data))
--> 502         raise_on_error(r)
    503 
    504         raw_issue_json = json.loads(r.text)

我做了一个json.dumps(data)来恢复实际传入的字符串,结果得到了:

'{"fields": {"issuetype": {"name": "Bug"}, "summary": "RFU", "project": {"key": "TW"}, "components": [{"name": "A Component"}]}}'

然后我直接将其复制粘贴作为--data参数给curl。结果也很好。

这似乎意味着jira-python并没有正常工作(我试过0.25和0.18版本)。

而且这也不是Python版本的问题(我试过Python 2.7、3.3和3.4)。

我的create_issue()调用看起来是这样的:

j.create_issue(project={'key':'TW'}, issuetype={'name':'Bug'}, summary='RFU', components=[{'name':'A Component'}])

所有指定的字段值都是有效的(虽然和这里显示的不同)

我到底做错了什么?这个功能在库里不可能坏掉吧。

我在虚拟环境中工作,以下是pip freeze的输出:

argparse==1.2.1
ipython==2.1.0
jira==0.25
oauthlib==0.6.3
requests==2.3.0
requests-oauthlib==0.4.1
six==1.7.2
tlslite==0.4.6
wsgiref==0.1.2

这个环境是通过简单的pip install ipython jira命令设置的。

顺便说一下,如果我获取一个现有的问题,然后用合适的参数调用issue.update(),那是可以正常工作的。

还有一件事:我在运行Ubuntu 14.04。

1 个回答

1

好的,我搞定了 - 主要是因为内部网络的一些小问题。

我们的内部 JIRA 服务器的证书过期了,所以他们把连接方式从 https 改成了 http。

我在创建 JIRA 实例时用了 'server':'https://...''verify':False,这样可以绕过证书错误。jira-python 可能就是通过 http 连接的,然后用这个方式进行所有查询。

但是当我们想要向网站发送数据时,就遇到了 https 和 http 的问题。

把连接改成 'server':'http://...',并去掉 'verify' 选项后就可以正常工作了。

我在 这里 找到了一个提示。

撰写回答