使用jira-python 0.25创建问题时出现E405错误
我已经使用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 个回答
好的,我搞定了 - 主要是因为内部网络的一些小问题。
我们的内部 JIRA 服务器的证书过期了,所以他们把连接方式从 https 改成了 http。
我在创建 JIRA 实例时用了 'server':'https://...'
和 'verify':False
,这样可以绕过证书错误。jira-python 可能就是通过 http 连接的,然后用这个方式进行所有查询。
但是当我们想要向网站发送数据时,就遇到了 https 和 http 的问题。
把连接改成 'server':'http://...'
,并去掉 'verify'
选项后就可以正常工作了。
我在 这里 找到了一个提示。