对Jenkins的纯Java REST API POST调用/ reload或/ restart始终返回禁止状态403,但可以工作

时间:2019-05-14 14:38:56

标签: rest jenkins jenkins-api

运行此命令时出现异常,但是 Jenkins实际上执行了请求的操作

persistentvolumeclaim "myclaim" not

例外:

  URL url = new URL("https://somehost.com/jenkins/quietDown");
  HttpURLConnection c= (HttpURLConnection) url.openConnection();
  c.setRequestMethod("POST");
  c.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString(("user:apiToken").getBytes()));
  c.getInputStream().close();

使用Jenkins 2.164.3和Java 8进行测试。

1 个答案:

答案 0 :(得分:0)

设置此设置可消除异常:

connection.setInstanceFollowRedirects(false);

几个小时后,我注意到堆栈跟踪包含的URL与我发布到的URL略有不同:

https://somehost.com/jenkins/
vs
https://somehost.com/jenkins/quietDown

Jenkins似乎通过重定向(302 Found)进行了响应,默认情况下,HttUrlConnections会从该重定向中读取该重定向,然后由于某种原因导致该异常。

最长的时间里,我试图找到一种无需调用connection.getInputStream()即可发出POST请求的方法,但这似乎是唯一实际触发请求的调用。如果有人知道使用纯Java发出POST请求的另一种方法,请告诉我。

我知道我的URL和username:token的内容是正确的,因为我使用curl进行了测试(即使打开了Follow redirect选项,它也没有抱怨):

curl -X POST https://somehost.com/jenkins/quietDown -u admin:token
curl -L -X POST https://somehost.com/jenkins/quietDown -u admin:token