1

我有一个 javascript 应用程序,它显示有关 jenkins 工作的信息。直到最近,我使用带有 JSONP 的 ajax 调用从 jenkins 检索数据(jenkins 和客户端位于不同的服务器上),但在最新的 jenkins 版本中,JSONP api 被禁用。

我在 jenkins wiki 上阅读了远程访问 API页面,但我仍然不知道如何从 javascript 中进行操作。我尝试使用基本的 http 身份验证(jenkins 使用 https),但没有成功。我也尝试使用 crumbissuer,但在日志中詹金斯说 crumb 无效......

如何从 javascript 使用 jenkins 远程 api?谢谢。

编辑:

我尝试了这样的http身份验证(我没有确切的代码了):

$.ajax({
        dataType : "json",
        url : jenkinsURL + "/job/" + jenkinsJob + "/api/json?tree=name,url,color",
        beforeSend : function(xhr) {
            xhr.setRequestHeader("authorization", "Basic " + Base64.encode(username + ":" + password);
        }
       })
    .done(function(data) {
        // process data
    })

我尝试类似地使用 crumb issuer:

$.ajax({
        dataType : "json",
        url : jenkinsURL + "/job/" + jenkinsJob + "/api/json?tree=name,url,color",
        beforeSend : function(xhr) {
            xhr.setRequestHeader(".crumb", "<received crumb>");
        }
       })
    .done(function(data) {
        // process data
    })
4

1 回答 1

0

使用这些设置请求标头在 Java 中对我有用。

URL url = new URL(JenkinsURL);
HttpURLConnection xhr= (HttpURLConnection) url
                        .openConnection();


xhr.setRequestMethod("GET");
xhr.setRequestProperty("User-Agent",
                            "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0");
xhr.setRequestProperty("Accept",
                            "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
xhr.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

xhr.setRequestHeader("Authorization", "Basic " + Base64.encode(username + ":" + password);          
xhr.setRequestProperty("Connection", "Keep-Alive");
xhr.setAllowUserInteraction(true);
xhr.setDoOutput(true);

xhr.connect();


System.out.println(xhr.getResponseCode());// Hack to run the request if it wasnt run
   BufferedReader br = new BufferedReader(new InputStreamReader(xhr.getInputStream()));
        String output;
        while ((output = br.readLine()) != null) {
    //some code
    }
于 2015-03-26T07:38:33.257 回答