>source

전체 검색했지만 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

수정 : 의견을 바탕으로 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에 액세스하는 중 문제가 발생했습니다. 이유 : 요청에 유효한 부스러기가 포함되지 않았습니다

  • 답변 # 1

    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)))
    
    

  • 답변 # 2

    일부 시행 착오와 함께 많은 제안 사항을 정리 한 후 마침내 Jenkins 작업을 아래 VBScript 코드로 원격으로 실행할 수있었습니다 (변수가 strCrumb와 같은 적절한 값으로 설정 됨). 반환 된 상태는 성공을 위해 201입니다. Base64 함수는 VBScript의 Base64 Encode String에서 가져 왔습니다

    Dim strJenkinsURL, strParam1, strParam2, strCrumb, strUsername, strPassword
    strJenkinsURL = "https://<jenkinsURL>/job/testjob/buildWithParameters?token=test&param1="& strParam1 &"&param2="& 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
    
    

  • 이전 android - SearchView에서 커서 풀러 배경색을 변경하는 방법은 무엇입니까?
  • 다음 android - 계정 생성을 어떻게 제한합니까?