Json 手动使用Jira Rest API与以编程方式使用Jira Rest API有区别吗?
Jira Rest API新手…我想用VBA程序登录我的本地Jira服务器。我可以登录并手动使用restapi和URL&获取我正在寻找的JSON响应,但是每次我尝试使用VBA(Excel)这样做时,都会出现以下错误 {“errorMessages”:[“您没有查看指定邮件的权限。” 问题“”,“需要登录”],“错误”:{} 我使用的是基本授权。我还有别的事要做吗?(我正在使用下面的代码,我可以从其他帖子中复制)。也许Jira认为我的代码与我的登录名不同Json 手动使用Jira Rest API与以编程方式使用Jira Rest API有区别吗?,json,vba,excel,jira-rest-api,Json,Vba,Excel,Jira Rest Api,Jira Rest API新手…我想用VBA程序登录我的本地Jira服务器。我可以登录并手动使用restapi和URL&获取我正在寻找的JSON响应,但是每次我尝试使用VBA(Excel)这样做时,都会出现以下错误 {“errorMessages”:[“您没有查看指定邮件的权限。” 问题“”,“需要登录”],“错误”:{} 我使用的是基本授权。我还有别的事要做吗?(我正在使用下面的代码,我可以从其他帖子中复制)。也许Jira认为我的代码与我的登录名不同 Sub JiraRestGetCall()
Sub JiraRestGetCall()
Call JiraRest
End Sub
Private Function UserPassBase64() As String
Dim objXML As MSXML2.DOMDocument60
Dim objNode As MSXML2.IXMLDOMElement
Dim arrData() As Byte
arrData = StrConv("MyUserName:MyPassword", vbFromUnicode)
Set objXML = New MSXML2.DOMDocument60
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
UserPassBase64 = objNode.Text
End Function
Public Function JiraRest()
Dim JiraService As New MSXML2.XMLHTTP60
With JiraService
.Open "Get", "http://localhost:8080/rest/api/2/issue/NP-1.json", False
.SetRequestHeader "Content-Type", "application/json"
.SetRequestHeader "Authorization", "Basic " & UserPassBase64
.Send ""
If .Status = "401" Then
MsgBox "Not authorized of invalid username/password"
Else
Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
MyRequest.Open "Get", "http://localhost:8080/rest/api/2/issue/NP-1.json"
MyRequest.Send
MsgBox MyRequest.ResponseText
End If
End With
End Function
我个人经常和吉拉联系。你的代码在其他地方看起来很好。如果您的基本加密工作正常,我看不出错误可能来自何处。以下是我用于向Jira请求数据的函数。它当然可以被清理/通用化(更不用说添加错误处理),但就我的目的而言,它工作得很好 这段代码的大部分归功于Patrick的回答: 其工作原理如下:
发布新的Jira会话,包括您的登录信息,并从响应中提取会话ID
获取所需的任何数据,包括标头中的会话ID
删除会话
get
,可以将其拆分为3个单独的函数,并且只运行步骤1和步骤3一次
Function getJiraJSON(restURL As String, requestString As String, jiraUsername As String, jiraPassword As String) As String
Dim JiraService As New MSXML2.XMLHTTP60
Dim JiraAuth As New MSXML2.XMLHTTP60
Dim postResp As String
Dim cookieVal As String
With JiraAuth
.Open "POST", restURL & "auth/1/session", False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Accept", "application/json"
.setRequestHeader "X-Atlassian-Token", "no-check"
.send " {""username"" : """ & jiraUsername & """, ""password"" : """ & jiraPassword & """}"""
postResp = .responseText
cookieVal = "JSESSIONID=" & Mid(postResp, 42, 32) & "; Path=/Jira" 'Extract the Session-ID
End With
With JiraService
.Open "GET", restURL & requestString, False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Accept", "application/json"
.setRequestHeader "Set-Cookie", cookieVal
.send
getJiraJSON = .responseText
End With
With JiraAuth
.Open "DELETE", restURL & "auth/1/session", False
.send
End With
End Function
在您的情况下,您可以将其称为:
MsgBox getJiraJSON("http://localhost:8080/rest/", "api/2/issue/NP-1.json", "myUsername", "myPassword")