Java Jenkins在请求头中传递crump后在EC2服务器中发送403

Java Jenkins在请求头中传递crump后在EC2服务器中发送403,java,jenkins,java-8,Java,Jenkins,Java 8,我在API调用中使用CSRF Jenkins crumps从Java在Jenkins中创建一个新作业 我尝试了以下方法 调用API以获取碎屑数据 http://admin:11542c80972c3a2b863453d234de68b1d@10.139.163.33/api/json 我还尝试了下面的URL 下面是从服务器获得的JSON响应 {“U类”:“hudson.security.csrf.defaultcrump发行人”,“crump”:“b272a09b604e7b7cc8ee143

我在API调用中使用CSRF Jenkins crumps从Java在Jenkins中创建一个新作业

我尝试了以下方法

调用API以获取碎屑数据

http://admin:11542c80972c3a2b863453d234de68b1d@10.139.163.33/api/json

我还尝试了下面的URL

下面是从服务器获得的JSON响应

{“U类”:“hudson.security.csrf.defaultcrump发行人”,“crump”:“b272a09b604e7b7cc8ee1431f0a0143fa1422db2fb5f92955b0356a31da37463”,“crumrequestfield”:“Jenkins crump”}

在下一步中,我将给Jenkins打电话,创建一个新作业,标题为

Jenkins-Crumb:b272a09b604e7b7cc8ee1431f0a0143fa1422db2fb5f92955b0356a31da37463
Jenkins给了我403,我正在使用HttpGet获取令牌,并使用HttpPost和上面的头并发送给Jenkins

当我尝试与邮递员,它没有给出这个错误。我在1台ec2服务器上运行Java应用程序,在另一台ec2服务器上运行jenkins

没有代理,我也尝试过使用各种选项,如启用代理兼容性、重新启动jenkins等,但不起作用

请给我指点

使用的Java代码是

HttpPost postRequest = new HttpPost(url);
    JenkinsCrumb crumb = jenkinsHelper.getCrumb();
    String encodedPassword = Base64.getEncoder().encodeToString((user + ":" + pwd).getBytes());
    postRequest.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + encodedPassword);
    postRequest.addHeader(new BasicHeader(crumb.getCrumbRequestField(), crumb.getCrumb()));
    return postRequest;
获取面包屑的代码是

String urlWithToken = "http://" + (user + ":" + pwd) + "@";
                HttpGet request = new HttpGet(jenkinsBaseUrl.replace("http://", urlWithToken) + "crumbIssuer/api/json");
                request.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + encodedPassword);
                CloseableHttpResponse httpResponse = httpClient.execute(request);

我也尝试过使用CURL命令,但仍然得到了相同的响应

我能够通过对crump和POST请求使用相同的HttpClient(CloseableHttpClient)来解决这个问题。早些时候,我使用了两个独立的客户端,一个用于获取面包屑,另一个用于发布数据。对这两个应用程序使用共享httpclient会导致出现成功状态

希望这能帮助其他面临类似问题的开发人员