You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python-Jenkins调用报403 Forbidden隧道连接失败问题求助

Python Jenkins API 突然失效的解决方法

问题背景

一直用Python Jenkins API管理Jenkins任务,之前运行正常,现在突然失效。

原代码片段

import jenkins

server = jenkins.Jenkins('https://jenkins.company.com', username='xxxx', password='password')
server._session.verify = False
print(server.jobs_count())

报错信息

File "", line 1, in 
server.jobs_count()

File "E:\anaconda3\Lib\site-packages\jenkins\__init__.py", line 1160, in jobs_count
return len(self.get_all_jobs())

File "E:\anaconda3\Lib\site-packages\jenkins\__init__.py", line 1020, in get_all_jobs
jobs = [(0, [], self.get_info(query=jobs_query)['jobs'])]

File "E:\anaconda3\Lib\site-packages\jenkins\__init__.py", line 769, in get_info
requests.Request('GET', self._build_url(url))

File "E:\anaconda3\Lib\site-packages\jenkins\__init__.py", line 557, in jenkins_open
return self.jenkins_request(req, add_crumb, resolve_auth).text

File "E:\anaconda3\Lib\site-packages\jenkins\__init__.py", line 573, in jenkins_request
self.maybe_add_crumb(req)

File "E:\anaconda3\Lib\site-packages\jenkins\__init__.py", line 371, in maybe_add_crumb
'GET', self._build_url(CRUMB_URL)), add_crumb=False)

File "E:\anaconda3\Lib\site-packages\jenkins\__init__.py", line 557, in jenkins_open
return self.jenkins_request(req, add_crumb, resolve_auth).text

File "E:\anaconda3\Lib\site-packages\jenkins\__init__.py", line 576, in jenkins_request
self._request(req))

File "E:\anaconda3\Lib\site-packages\jenkins\__init__.py", line 550, in _request
return self._session.send(r, **_settings)

File "E:\anaconda3\Lib\site-packages\requests\sessions.py", line 622, in send
r = adapter.send(request, **kwargs)

File "E:\anaconda3\Lib\site-packages\requests\adapters.py", line 507, in send
raise ProxyError(e, request=request)

ProxyError: HTTPSConnectionPool(host='jenkins.company.com', port=443): Max retries exceeded with url: /job/scp/job/sm/job/9218/job/4198/job/SIT/crumbIssuer/api/json (Caused by ProxyError('Cannot connect to proxy.', OSError('Tunnel connection failed: 403 Forbidden')))

已知情况

  • Jenkins服务器无需代理,账号密码可正常登录网页
  • 已拥有crumb ID和API Token,但不知道如何在Python-Jenkins API中添加crumb

解决步骤

1. 解决代理问题

报错核心是ProxyError 403,说明本地请求被强制走了系统代理,但Jenkins不需要代理。直接给Jenkins会话禁用代理:

server._session.proxies = {}

2. 改用API Token代替密码

用账号的API Token登录比密码更安全,也能避免密码过期、权限限制等问题,初始化时替换密码参数即可:

server = jenkins.Jenkins('https://jenkins.company.com', username='xxxx', password='你的API_TOKEN')

3. 手动设置Crumb(自动获取失败时)

Python-Jenkins默认会自动获取crumb,但如果自动获取失败,可手动获取并添加到请求头:

crumb = server.get_crumb()
server._session.headers.update({'Jenkins-Crumb': crumb['crumb']})

修改后的完整代码

import jenkins

# 用API Token初始化连接
server = jenkins.Jenkins('https://jenkins.company.com', username='xxxx', password='你的API_TOKEN')
# 禁用SSL验证
server._session.verify = False
# 禁用代理
server._session.proxies = {}
# 手动设置crumb
crumb = server.get_crumb()
server._session.headers.update({'Jenkins-Crumb': crumb['crumb']})

# 测试连接
print(server.jobs_count())

内容的提问来源于stack exchange,提问作者Heinz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 14:40:15