使用Python的simple_salesforce包时遭遇SalesforceExpiredSession错误
解决simple_salesforce调用Salesforce报表API的INVALID_SESSION_ID错误
我用simple_salesforce包下载Salesforce上的报表,代码如下:
from simple_salesforce import Salesforce import requests import pandas as pd from io import StringIO sf = Salesforce(username='myusername', password='mypassword', security_token='mytoken', version='46.0') report_id = 'myreportid' sf.restful('analytics/reports/{}'.format(report_id))
执行后报错:
SalesforceExpiredSession: 会话已过期,请求地址:https://company_name.my.salesforce.com/services/data/v46.0/analytics/reports/myreporid。响应内容: [{'message': '该会话无法用于REST API', 'errorCode': 'INVALID_SESSION_ID'}]
解决办法
- 刷新会话:直接重新初始化Salesforce对象,或者调用
sf.login()方法重新登录,更新会话ID。 - 检查API权限:确认账号拥有Analytics REST API访问权限,在Salesforce的权限集里开启对应权限。
- 升级API版本:46.0版本较旧,尝试换成最新的稳定版本(比如58.0),避免版本兼容问题。
- 手动构造请求:如果restful方法会话有问题,直接用requests带会话头请求:
headers = { 'Authorization': f'Bearer {sf.session_id}', 'Content-Type': 'application/json' } response = requests.get(f'{sf.base_url}/analytics/reports/{report_id}', headers=headers) # 解析报表数据 report_data = response.json() # 如果要转成DataFrame df = pd.DataFrame(report_data['factMap']['T!T']['rows'])
- 验证实例URL:确认
sf.base_url和你的Salesforce实例域名匹配,避免会话绑定到错误域名。
内容的提问来源于stack exchange,提问作者sara
相关产品推荐
相关产品推荐

