我有一个 javascript 应用程序,它显示有关 jenkins 作业的信息。直到最近,我使用 JSONP 进行 ajax 调用来从 jenkins 检索数据(jenkins 和客户端位于不同的服务器上),但在最新的 jenkins 版本中,JSONP api 被禁用。
我读到Remote access API jenkins wiki 上的页面,但我仍然不知道如何从 javascript 做到这一点。我尝试使用基本的 http 身份验证(jenkins 使用 https),但没有成功。我也尝试使用 crumbissuer,但在日志中 jenkins 说 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
})
我尝试类似地使用面包屑发行者:
$.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
})
最佳答案
在 Java 中使用这些设置请求 header 对我有用。
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
}
关于javascript - 从 javascript 访问 jenkins 远程 api,无需 JSONP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19475173/