我找遍了所有的地方,但是没有找到VBscript的例子,我所有的尝试都失败了。我需要从一个经典的ASP网页(VBScript)运行一个Jenkins作业。我可以使用下面的代码提交作业,但它返回一个403 crumb错误。我需要做的是提供此工作的用户/密码(我有),但我不知道如何在VBScript中为Jenkins设置身份验证。我知道crumb错误是由于CSRF造成的(我读了那么多,但无法关闭它),并希望身份验证能解决这个问题。任何帮助都是非常感谢的。提前谢谢。
Dim strJenkinsURL, HttpReq
strJenkinsURL = "http://<jenkinsmaster>/job/<myjob>/buildWithParameters?token=test&Description="& strDesc &"&TestEnv="& testEnv
Set HttpReq = Server.CreateObject("MSXML2.ServerXMLHTTP")
HttpReq.Open "POST", strJenkinsURL, False
HttpReq.Send
Response.Write "<br>Status: "& HttpReq.Status & vbNewline
Response.Write "<br>Response: "& HttpReq.responseText & vbNewline编辑:根据评论,我尝试添加Jenkins登录信息,但仍然收到来自Jenkins的403 crumb错误。我尝试过寻找解决方案来获取碎屑,但没有找到任何VBScript示例。下面是我正在尝试的代码和响应,但我不知道setRequestHeaders对Jenkins是否正确,Jenkins文档也没有任何帮助:
Dim strJenkinsURL
strJenkinsURL = "http://<jenkins master>/job/testjob/buildWithParameters?token=test&Description="& strDesc &"&TestEnv="& testEnv
Set HttpReq = Server.CreateObject("MSXML2.ServerXMLHTTP")
HttpReq.Open "POST", strJenkinsURL, False
HttpReq.setRequestHeader "UserName", "jenkinsuser"
HttpReq.setRequestHeader "Password", "userpassword"
HttpReq.setRequestHeader "Jenkins-Crumb", "<crumbvalue>"
HttpReq.Send
Response.Write "<br>Status: "& HttpReq.Status & vbNewline
Response.Write "<br>Response: "& HttpReq.responseText & vbNewline状态: 403响应:访问/job/testjob/buildWithParameters时出现HTTP错误403问题。原因:请求中没有包含有效的crumb
发布于 2019-07-11 21:36:55
在经过反复试验拼凑出许多建议之后,我终于能够使用下面的VBScript代码(将变量设置为适当的值,如strCrumb)远程运行Jenkins作业。如果成功,则返回状态为201。Base64函数取自Base64 Encode String in VBScript
Dim strJenkinsURL, strParam1, strParam2, strCrumb, strUsername, strPassword
strJenkinsURL = "https://<jenkinsURL>/job/testjob/buildWithParameters?token=test¶m1="& strParam1 &"¶m2="& strParam2
Set HttpReq = Server.CreateObject("MSXML2.ServerXMLHTTP")
HttpReq.Open "POST", strJenkinsURL, False
HttpReq.setOption 2, 13056
HttpReq.setRequestHeader "Jenkins-Crumb", strCrumb
HttpReq.setRequestHeader "Authorization", "Basic "& Base64Encode(strUsername &":"& strPassword)
HttpReq.Send
Response.Write "<br>Status: "& HttpReq.Status & vbNewline
Response.Write "<br>Response: "& HttpReq.responseText & vbNewline
Function Base64Encode(sText)
Dim oXML, oNode
Set oXML = CreateObject("Msxml2.DOMDocument.3.0")
Set oNode = oXML.CreateElement("base64")
oNode.dataType = "bin.base64"
oNode.nodeTypedValue = Stream_StringToBinary(sText)
Base64Encode = oNode.text
Set oNode = Nothing
Set oXML = Nothing
End Function
Private Function Stream_StringToBinary(Text)
Const adTypeText = 2
Const adTypeBinary = 1
Dim BinaryStream 'As New Stream
Set BinaryStream = CreateObject("ADODB.Stream")
BinaryStream.Type = adTypeText
BinaryStream.CharSet = "us-ascii"
BinaryStream.Open
BinaryStream.WriteText Text
BinaryStream.Position = 0
BinaryStream.Type = adTypeBinary
BinaryStream.Position = 0
Stream_StringToBinary = BinaryStream.Read
Set BinaryStream = Nothing
End Function发布于 2019-07-02 18:24:00
对于HTTP POST请求,URL指定资源,即strJenkinsURL = "http://<jenkinsmaster>/job/<myjob>/buildWithParameters
这些参数将作为.Send命令的一部分添加:
Dim sParams
sParams = "token=test&Description=" & strDesc & "&TestEnv=" & testEnv
HttpReq.Send(sParams)正如@Lankymart指出的那样,您还需要设置适当的标头,例如
HttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
HttpReq.setRequestHeader("Content-Length", CStr(Len(sParams)))https://stackoverflow.com/questions/56809599
复制相似问题