首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jira REST CURL命令成功,快速程序失败。

Jira REST CURL命令成功,快速程序失败。
EN

Stack Overflow用户
提问于 2020-09-17 20:21:23
回答 1查看 290关注 0票数 1

我正在尝试使用Jira REST通过用Swift编写的MacOS程序以编程方式更新问题。我有一个Jira API令牌,并且已经成功地使用了CURL。以下是命令:

代码语言:javascript
复制
curl --request PUT \
  --url 'https://xxxx.atlassian.net/rest/api/2/issue/SAN-2' \
  --user 'xxx@yyy.com:zzz' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{
"update": {
"timetracking": [
{
"edit": {
"originalEstimate": "1w 1d"
}
}
]
}
}'

其中,zzz是API令牌。这是有效的,该字段是正确的更新。

Swift版本尽可能紧密地反映了这一点,但是错误失败了。

响应:{“errorMessages”:“问题不存在或您没有查看它的权限。”,“错误”:{}}

以下是Swift代码:

代码语言:javascript
复制
        let tokenString = "xxx@yyy.com:zzz"

        guard let encodedTokenString = tokenString.data(using: .utf8)?.base64EncodedData() else { fatalError("Can't encode token") }

        let authString = String("Token token=\(encodedTokenString)")

        guard let url = URL(string: "https://xxxx.atlassian.net/rest/api/2/issue/SAN-2")

        else {
            fatalError("Couldn't create a static URL")
        }

        let request = NSMutableURLRequest(url: url)

        request.addValue(authString, forHTTPHeaderField: "Authorization")

        request.addValue("application/json", forHTTPHeaderField: "Content-Type")

        request.httpMethod = "PUT"

        let dataString = "{\"update\": {\"timetracking\": [{\"edit\": {\"originalEstimate\": \"1w 1d\"}}]}}".utf8

        let body = Data(dataString)    

        request.httpBody = body

        let session = URLSession.shared

        session.dataTask(with: request as URLRequest) { (data, response, error) -> Void in

            guard let data = data, let responseString = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as String?, !responseString.isEmpty else {
                print("No valid response!")
                return
            }
            print("Response: " + responseString)

        }.resume()

我显然有权编辑这个问题,而且它是存在的。我有一个API令牌,它可以工作。我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-17 21:40:29

我认为有两个问题:

1)将encodedTokenString设置为数据而不是字符串.

代码语言:javascript
复制
guard let encodedTokenString = tokenString.data(using: .utf8)?.base64EncodedData() else { fatalError("Can't encode token") }

将上述更改为:

代码语言:javascript
复制
guard let encodedTokenString = tokenString.data(using: .utf8)?.base64EncodedString() else { fatalError("Can't encode token") }

2)您的authString应该是:

代码语言:javascript
复制
`let authString = String("Basic \(encodedTokenString)")`
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63945672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档