在远程计算机上向JIRA REST API发出POST请求

时间:2016-07-15 14:47:19

标签: r post curl jira-rest-api

如何与在远程服务器上运行的JIRA安装的REST API进行通信?

详细

我想通过this little example了解如何与JIRA的REST API进行交互。

这是我想发出的请求:

curl -u admin:admin -X POST --data @data.txt -H "Content-Type: application/json" http://localhost:2990/jira/rest/api/2/issue/

我的JIRA应用程序在AWS计算机上运行,​​例如,以下URL:

http://aws-url:8080

这是我用来发送POST请求的R调用:

httr::POST("http://aws-url:8080/jira/rest/api/2/issue/", 
  "-u" = "myuser:mypassword", 
  "--data" = "@data.json", 
  "-H" = "Content-Type: application/json")

但是,我收到了以下404回复:

Response [http://aws-url:8080/jira/rest/api/2/issue/]
  Date: 2016-07-15 14:28
  Status: 404
  Content-Type: text/html;charset=UTF-8
  Size: 2.76 kB
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-C...


<ul class="atlassian-footer">
    <li>
        Atlassian JIRA <a class="seo-link" rel="nofollow" href="https://www.atlassi...



        <span id="footer-build-information">(v7.1.9#71013-<span title='1aa0586d78ef...
...

所以我猜我错误地指定了URL(或者仍然误解了我的JIRA实例的REST API是如何被联系的)和/或错误地指定了对POST的调用?

抱歉,还不熟悉整个网络技术堆栈。该问题与this one

有关

更新

尝试了这个请求,但得到了相同的结果:

httr::POST(url,
  body = "-u myuser:mypassword --data @data.json",
  encode = "json"
)

2 个答案:

答案 0 :(得分:1)

404表示“未找到”,因此您使用的网址存在问题。

如果您在浏览器中粘贴这样的内容,会得到什么?

$(document).ajaxComplete(function(){
    FormSliderSwitcher.init();
});

此外,如果您通过浏览器访问JIRA,是使用http://aws-url:8080/jira还是除了/ jira之外还有其他内容?

答案 1 :(得分:1)

网址结构

似乎实际的网址需要像这样:

http://aws-url:8080/rest/api/2/issue/

http://aws-url:8080/rest/api/latest/issue/

而不是

http://aws-url:8080/jira/rest/api/latest/issue/

假设您的JIRA实例在端口8080上运行

我不太清楚为什么可以从网址中删除context(我的情况为jira),因为resource建议URL结构必须如下所示:

http://host:port/context/rest/api-name/api-version/resource-name

我作为web-dev n00b的唯一解释是,我已经明确地通过它的端口号以某种方式明确地对待JIRA实例?然而,我可能会混淆contextapi-name的含义(对那些东西还没那么深;-))。如果省略,api-name是否会获得默认值?

GET请求

此GET请求

res <- GET(http://aws-url:8080/rest/api/latest/issue/{anExistingIssueKey},
    authenticate("user", "password"))

给了我一个200回复,其中包含已存在的问题的所有问题详情。

POST请求

实际的POST请求需要如下所示:

url <- "http://aws-url:8080/rest/api/latest/issue/"
res <- POST(url,
  authenticate("user", "password"),
  body = upload_file("data.txt"),
  encode = "json"
)

并为您提供201回复