在没有JSONP的情况下从javascript访问jenkins远程api

时间:2013-10-20 08:03:04

标签: javascript jenkins jsonp remote-access

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

我在jenkins wiki上阅读了Remote access API页面,但我仍然不知道如何从javascript中做到这一点。我尝试使用基本的http身份验证(jenkins使用https)没有运气。我也尝试使用crumbissuer,但在日志中jenkins说碎屑是无效的......

如何从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发行者:

$.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
    })

1 个答案:

答案 0 :(得分: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
    }