首页 > 解决方案 > 在 Java 中将 curl 请求复制到 Jenkins

问题描述

有一百个这样的问题,但我找不到任何有效的答案。

使用 curl 我有一个工作请求,响应是201: created

curl -i -X POST https://username:APITOKEN@jenkins-server/job/jobName/buildWithParameters?token=TOKEN -H "Jenkins-Crumb:xxxx"

但是,如果我尝试在 Java 中复制相同的请求,我会得到一个403 No valid crumb was included in the request. CSRF 已激活(启用代理兼容性)。

我的 Java 实现(使用 org.apache.httpcomponents:httpcore v.4.4.9):

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClients;

HttpClient client = HttpClients.createDefault();
String url = "https://username:" + apiToken + "@" + "jenkins-server/job/jobName/buildWithParameters?token=TOKEN";
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader("Jenkins-Crumb", "xxxx");
HttpResponse response = client.execute(httpPost);

我错过了什么?

编辑 我也尝试过使用其他 Java 库(Unirest、OkHttp)导致相同的响应代码403也尝试过使用 Python(请求库),它就像一个魅力:

requests.request("POST", "https://username:ApiToken@jenkins-server/job/jobname/buildWithParameters", data="", headers={"Jenkins-Crumb": "xxx"}, params={"token":"TOKEN"})

标签: javajenkinscurljenkins-api

解决方案


推荐阅读