Tableau服务器登录遇SSL证书验证错误:请求重试超限
Tableau服务器连接SSL证书验证失败问题解决
问题场景
要将Tableau服务器上的工作簿数据导入Google Sheets,使用tableauserverclient库编写连接代码时出现SSL证书验证错误,代码及错误信息如下:
连接代码
import tableauserverclient as TSC import requests tableau_auth = TSC.PersonalAccessTokenAuth('Token Name', 'Access Token', site_id='URL of workbook') server = TSC.Server('server URL', use_server_version=True) server.auth.sign_in(tableau_auth)
错误信息
SSLError: HTTPSConnectionPool(host='Server URL', port=443): Max retries exceeded with url: //api/2.4/auth/signin (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:997)')))
解决方案
1. 临时禁用SSL验证(仅测试环境使用)
这是快速绕过错误的方法,但绝对不能用于生产环境,会带来安全风险。在初始化server对象后添加一行代码:
server.add_http_options({'verify': False})
修改后的完整代码:
import tableauserverclient as TSC import requests # 注意:site_id是Tableau站点的ID(不是工作簿URL),通常是站点名称或URL末尾的标识 tableau_auth = TSC.PersonalAccessTokenAuth('Token Name', 'Access Token', site_id='你的站点ID') server = TSC.Server('server URL', use_server_version=True) # 临时禁用SSL验证 server.add_http_options({'verify': False}) server.auth.sign_in(tableau_auth)
注意:你之前将site_id设为工作簿URL是错误的,site_id需要填写Tableau站点的实际ID,可在Tableau服务器的站点设置中查看。
2. 导入可信证书(生产环境推荐)
通过导入Tableau服务器的SSL证书,让Python信任该服务器:
- 打开浏览器访问Tableau服务器URL,点击地址栏的锁图标,导出服务器的SSL证书(保存为
.pem格式) - 在代码中指定证书路径:
server.add_http_options({'verify': '/本地证书文件路径/tableau_cert.pem'})
也可以将证书添加到系统的可信证书存储中,让Python自动识别。
3. 配置requests库的CA证书
如果系统默认的CA证书存储存在问题,可以通过环境变量指定requests的CA bundle路径:
import os # 替换为你的CA bundle文件路径 os.environ['REQUESTS_CA_BUNDLE'] = '/path/to/ca-bundle.pem'
后续数据提取到Pandas DataFrame
连接成功后,可通过tableauserverclient获取工作簿数据源,将数据提取到DataFrame,示例代码如下:
# 获取所有工作簿 workbooks, _ = server.workbooks.get() # 找到目标工作簿 target_workbook = next(wb for wb in workbooks if wb.name == '你的工作簿名称') # 加载工作簿的连接信息 server.workbooks.populate_connections(target_workbook) for connection in target_workbook.connections: # 处理提取类型的数据源 if connection.is_extract: # 下载提取文件 extract_path = server.download(connection.id) # 使用tableauextractapi读取提取文件并转换为DataFrame from tableauextractapi import Extract import pandas as pd with Extract(extract_path) as extract: table = extract.open_table('Extract') # 将提取表的行数据转换为DataFrame df = pd.DataFrame([row.values for row in table])
内容的提问来源于stack exchange,提问作者user22640333
相关产品推荐
相关产品推荐

