首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过python requests.POST()触发jenkins作业时没有有效的crumb错误

通过python requests.POST()触发jenkins作业时没有有效的crumb错误
EN

Stack Overflow用户
提问于 2020-07-21 20:14:23
回答 1查看 662关注 0票数 1

我正在尝试通过python requests.POST()触发jenkins作业。

代码语言:javascript
复制
reply = requests.post(url,
                      data=data,
                      cookies=self.__cookies,
                      auth=(self.__user, self.__pass),
                      files=files,
                      )

收到的错误: //job/Deploy/job/JOBNAME/buildWithParameters的请求中未包含有效的crumb。返回403。

然后尝试使用以下代码在header中传递crumb:

代码语言:javascript
复制
session = requests.Session()
crum = session.get('https://xxxxxx.xxx.net:7xxx/crumbIssuer/api/json',
                    auth=(self.__user, self.__pass)).json() 
reply = requests.post(url,
                      data=data,
                      cookies=self.__cookies,
                      params={crum['crumbRequestField']: crum['crumb']},
                      auth=(self.__user, self.__pass),
                      headers={crum['crumbRequestField']: crum['crumb']},
                      files=files,
                      )

收到以下错误:

发现无效的crumb 09ee0x69284910425bd94378a1735b3471826e8d5ec077c526562.如果您使用脚本调用此URL,请改用API标记。更多信息:https://jenkins.io/redirect/crumb-cannot-be-used-for-script

我们正在寻找via requests.post()的解决方案

EN

回答 1

Stack Overflow用户

发布于 2020-10-02 04:41:05

为了让它正常工作,你需要一个有效的session、auth和crumb。我们也使用令牌,所以我也添加了令牌

代码语言:javascript
复制
with requests.Session() as s:
    s.auth = auth
    crumb = s.get(jenkins_url + "crumbIssuer/api/json").json()['crumb']
    s.headers.update({"token": token, "Jenkins-Crumb": crumb})

然后我们就可以

代码语言:javascript
复制
    s.post(url)

然后我们就会得到一个201版本。看起来你得到了所有的东西,除了你不是在会话中做,而是用一个简单的请求。用session.post替换requests.post可能就足够了

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63014344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档