【发布时间】:2018-01-25 12:39:08
【问题描述】:
我正在尝试通过 python 提取销售人员报告。我试过这种方法:
import requests
l = requests.get('sfinstanceurl/?un=user&pw=passw')
report = requests.get('sfinstanceurl/reportid?view=d&snip&export=1&enc=UTF-8&xf=csv',cookies=l.cookies)
print(report.content)
还有这个:
def sfdc_to_pd(reportid):
login_data = {'un': 'your_username', 'pw': 'your_password'}
with requests.session() as s:
s.get('https://your_instance.salesforce.com', params = login_data)
d = requests.get("https://your_instance.salesforce.com/{}?export=1&enc=UTF-8&xf=csv".format(reportid), headers=s.headers, cookies=s.cookies)
lines = d.content.splitlines()
reader = csv.reader(lines)
data = list(reader)
data = data[:-7]
df = pd.DataFrame(data)
df.columns = df.iloc[0]
df = df.drop(0)
return df
print df
对于两者,当我打印内容时,我得到了这个(即使状态响应总是 200):
b'\r\n<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">\n<html>\n<head>\n <meta HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">\n\n\n\n\n\n<script>\nif (this.SfdcApp && this.SfdcApp.projectOneNavigator) { SfdcApp.projectOneNavigator.handleRedirect(\'sfinstanceurl?ec=302&startURL=%2F00O0m000000JzRc%3Fview%3Dd%26enc%3DUTF-8%26export%3D1%26xf%3Dcsv%26snip%3D\'); } else \nif (window.location.replace){ \nwindow.location.replace(\'sfinstanceurl?ec=302&startURL=%2F00O0m000000JzRc%3Fview%3Dd%26enc%3DUTF-8%26export%3D1%26xf%3Dcsv%26snip%3D\');\n} else {;\nwindow.location.href =\'sfinstanceurl?ec=302&startURL=%2F00O0m000000JzRc%3Fview%3Dd%26enc%3DUTF-8%26export%3D1%26xf%3Dcsv%26snip%3D\';\n} \n</script>\n\n</head>\n\n\n</html>\n\n\n\n\n\n<!-- Body events -->\n<script type="text/javascript">function bodyOnLoad(){if(window.PreferenceBits){window.PreferenceBits.prototype.csrfToken="null";};}function bodyOnBeforeUnload(){}function bodyOnFocus(){}function bodyOnUnload(){}</script>\n\t\t\t\n</body>\n</html>\n\n\n<!--\n...................................................................................................\n...................................................................................................\n...................................................................................................\n...................................................................................................\n-->\n'
我的公司使用 SSO,所以安全令牌不是我必须尝试不同方法的东西。我错过了什么吗?为什么我在内容中收不到报告?
编辑:
我也刚刚尝试过这种方法:
from simple_salesforce import Salesforce
import requests
import base64
import json
sf = Salesforce(username= #login
,password= # password
,security_token= # token )
print "get sid ", sf.session_id
response = requests.get("https://instancename/reportid?view=d&snip&export=1&enc=UTF-8&xf=csv",
headers = sf.headers, cookies = {'sid' : sf.session_id})
response.content
它仍然返回相同的 HTML 对象。
【问题讨论】:
-
看起来你得到的是一个 HTML 对象,而不是预期的 csv 格式。尝试使用 simple-salesforce 之类的 salesforce python 模块进行身份验证并将其与访问特定报告的请求相结合。 salesforce.stackexchange.com/questions/47414/…
-
@BoboDarph 我刚刚尝试过(simple_salesforce 方法),仍然得到相同的 HTML 响应。将更新问题。
标签: python salesforce