我正在写一个网页,让其他人可以触发一些工作'使用jenkins
中的参数进行构建。所以我使用ajax发送POST请求:
var urlString = "http://localhost:8080/job/myjob/buildWithParameters";
$.post(
urlString,
{myParam:"there is some data"},
function(data)
{
alert(data);
},
"json"
);
但我收到了Http 403的回复:
XMLHttpRequest无法加载http://localhost:8080/job/myjob/buildWithParameters。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost'因此不允许访问。响应的HTTP状态代码为403。
我知道跨网站问题,但我无法从Google搜索任何有用的信息,ajax可以做这个工作吗?
更新: 我找到了similar question
所以我将我的代码更新为:
$.ajax({
type: "POST",
url: urlString,
dataType: 'jsonp',
data: {},
beforeSend: function(xhr){
xhr.setRequestHeader("Authorization", "Basic " + btoa("admin:123456"));
},
success: function(data) {
},
complete: function(xhr, statusText){
}
});
我可以确认用户名和密码是否正确,但我得到405 Method Not Allowed
。有什么不对吗?
答案 0 :(得分:1)
将您的网页放在$ JENKINS_HOME目录下的userContent文件夹中。然后在浏览器中打开$ JENKINS_URL / userContent / yourwebpage.html。现在页面中的javascript是从ajax调用的同一个来源加载的,所以应该允许它没有CORS技巧。
答案 1 :(得分:0)
Jenkins想要POST而不是GET HTTP请求,JSONP请求是GET:你不能这样做:D
您可以尝试以这种方式:
按照here所述的AJP绑定启动jenkins
将Apache2 httpd配置为reverse proxy for the Jenkins AJP
按照here所述强制执行Apache2响应标头以启用CORS
最后,您可以直接使用POST而不是JSONP。
玩XSS:D