java - 在 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"})
解决方案
推荐阅读
- javascript - 我想让第二个按钮单击事件仅在第一个按钮单击事件起作用后才起作用
- c# - 有什么方法可以从这个 Win32 函数中获得产量风格的 IEnumerable 吗?
- jsfiddle - svg.js & JsFiddle:在元素初始化时无法读取 null 的属性“大小”
- bootstrap-4 - 如何让 DIVS 在 Bootstrap 行中排队
- phpmyadmin - 在 phpMyadmin 中,为什么密码“user_122”和“user_124”被接受,但“user_123”不是用于访问数据库?
- javascript - 带有动画和 useEffect 的 React.useState
- github - 自托管 Ghost 博客:如何从开发切换到生产?
- c++ - 在 CMake 中将 qml 文件编译成 rcc 文件
- android - 如何设置 Android 应用程序按钮和条目的焦点以启用键盘导航
- php - PHP parse_str 没有得到所有 $_GET 变量