Крошка Дженкинса добавлена ​​в шапку, все равно получите 403? - PullRequest
0 голосов
/ 10 апреля 2020

Я пытался выяснить, как правильно получить крошку Дженкинса, и сделать вызов для сборки в Дженкинсе с Python.

Недавно мы обновили Jenkins, и теперь для выполнения запросов POST требуется крошка Jenkins.

На основании всей прочитанной документации я делаю это правильно.

Я могу переписать всю свою базу кода для использования библиотек jenkinsapi, но я надеялся выяснить, что я делаю здесь неправильно.

До обновления мне нужно было только включить заголовок Basi c Auth, и запрос POST был бы успешным.

Единственное, о чем я могу думать, это может вызывать проблемы могут заключаться в том, что все наши серверы связаны с неподписанными сертификатами, но я игнорирую эти предупреждения, и снова это работало раньше, игнорируя предупреждения.

Любая помощь будет принята с благодарностью.

Код:

import requests
import json

headers = {'Authorization': 'Basic #########################'}
crumbdata = requests.get('https://jenkinsserver/crumbIssuer/api/json', headers=headers, verify=False)
print(crumbdata.json())

headers[crumbdata.json()['crumbRequestField'].encode('utf-8')]=crumbdata.json()['crumb'].encode('utf-8')


url = "https://jenkinsserver/view/all/job/my-job-name/build"

jsonData = "{'json': {'parameter' : {'Task_Type' : 'status'}}}"

print("Headers = " + str(headers))
print("Json Data = " + jsonData)


response = requests.post(url, jsonData, headers=headers, verify=False)
print("Status Code = " + response.status_code)
print(response.text)

Выход:

{u'crumbRequestField': u'Jenkins-Crumb', u'_class': u'hudson.security.csrf.DefaultCrumbIssuer', u'crumb': u'17a053554314a1612e0f24b2d1ce49262fa5923a280072b3309d63879d031fb5'}
Headers = {'Jenkins-Crumb': '17a053554314a1612e0f24b2d1ce49262fa5923a280072b3309d63879d031fb5', 'Authorization': 'Basic ampib3ludDE6VE0kRmVocyYzNg=='}
Json Data = {'json': {'parameter' : {'Task_Type' : 'status'}}}
Status Code = 403
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 403 No valid crumb was included in the request</title>
</head>
<body><h2>HTTP ERROR 403 No valid crumb was included in the request</h2>
<table>
<tr><th>URI:</th><td>/view/all/job/my-job-name/build</td></tr>
<tr><th>STATUS:</th><td>403</td></tr>
<tr><th>MESSAGE:</th><td>No valid crumb was included in the request</td></tr>
<tr><th>SERVLET:</th><td>Stapler</td></tr>
</table>
<hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.27.v20200227</a><hr/>

</body>
</html>
...