【发布时间】:2019-06-28 15:30:34
【问题描述】:
我已经到处搜索,但找不到 VBscript 示例,我所有的尝试都失败了。我需要从经典的 ASP 网页 (VBScript) 运行 Jenkins 作业。我可以使用下面的代码提交作业,但它返回 403 crumb 错误。我需要做的是为这项工作提供用户/密码(我有),但我不知道如何在 VBScript 中为 Jenkins 设置身份验证。我知道碎屑错误是由 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
编辑: 基于 cmets,我尝试添加 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 响应:HTTP 错误 403 访问 /job/testjob/buildWithParameters 时出现问题。原因:请求中没有包含有效的面包屑
【问题讨论】:
-
为了验证错误是否在您的 vbscript 中,请尝试使用 curl 或 postman。与我们分享结果
-
VBScript 中没有代码错误。我需要知道如何将身份验证添加到 POST to Jenkins API 的问题。由于 CRSF 保护,403 错误来自 Jenkins。如果我可以在 POST 请求中添加登录身份验证,我认为这会像 curl 示例中一样解决它,其中显示 --user USER:PASSWORD。但是对于您使用 curl 的建议,即使在 Jenkins Remote API 页面上的多个示例和我搜索过的其他内容之后,我也无法格式化甚至可以连接到 Jenkins URL 的 curl 命令。
-
@PondScum 您需要了解需要设置哪些标头以及如何计算它们的值,您应该从the documentation 获得这些信息。
-
“我知道 crumb 错误是由 CSRF 引起的(我读了这么多,无法关闭它),希望身份验证能解决这个问题。” - 真的不应该。 CSRF 攻击是指某个其他站点 让浏览器请求对被攻击的站点(即本例中的 Jenkins)执行某些操作,并使用存储在浏览器中的凭据使其工作。
标签: jenkins vbscript asp-classic