将会话ID从简单的salesforce传递给请求

时间:2016-01-26 21:32:26

标签: python api python-requests salesforce simple-salesforce

我无法按照https://github.com/heroku/simple-salesforce中的指南将会话ID信息传递给请求。我似乎可以进行身份​​验证,但是当我尝试使用API​​查询时,它会给我一个'INVALID_SESSION_ID'。我不确定我在这里缺少什么,我认为这可能是我对API缺乏了解。

感谢任何帮助。

from simple_salesforce import Salesforce
import requests


session = requests.Session()
sf = Salesforce(instance='test.salesforce.com',session_id = '')
sf = Salesforce(username=username, password=password, security_token=security_token,session=session,sandbox=True)
response = session.get('https://test.salesforce.com/a4Z/o') #Returns a HTTP code 200
response = session.get('https://test.salesforce.com/services/data/v34.0/sobjects') #Returns a HTTP code 401
session.cookies.clear()

2 个答案:

答案 0 :(得分:0)

我对该lib知之甚少,但您似乎正在覆盖sf变量的实例化。例如,如果你刚刚做了:

import requests
session = requests.Session()
response = session.get('https://test.salesforce.com/a4Z/o')

您将获得200,因为它是一个用于测试的开放式REST服务。

您也没有为Salesforce()对象创建任何值来传递...例如,请查看lib作者使用用户名和密码进行身份验证的更完整示例:

from simple_salesforce import Salesforce
import requests

session = requests.Session()
# manipulate the session instance (optional)
sf = Salesforce(
   username='user@example.com', password='password', organizationId='OrgId',
   session=session)

显然这些是json的测试值,而不是实际的用户名和值。您需要传递有效的用户名和密码才能使其生效。

如果我是你,我会放弃你的sf变量的第一个实例化,在第二个实例中放入有效值,然后重试。

答案 1 :(得分:0)

你的instance论证似乎是这里的问题。该库希望您使用salesforce的特定测试实例。所以cs70.salesforce.comcs17.salesforce.com等等。当您从test.salesforce.com的浏览器登录沙箱时,成功登录后,您将被重定向到您的实例(abXX.salesforce.com)。将其用于instance

另外,你不需要一个空的" Salesforce会话变量(sf = Salesforce(instance='test.salesforce.com',session_id = '')

另外,(我知道这是一个2岁的帖子,我不知道当时的simple_salesforce是什么样的,但是,如果你不想要的话,不需要使用requests至。以下摘自the new github page。网站上有更多的例子,但答案的整个部分都偏离了这个问题。

  

记录管理创建新的'联系人'在Salesforce中:

     

sf.Contact.create({'LastName':'Smith','Email':'example@example.com'})

     

这将返回{u'errors': [], u'id': u'003e0000003GuNXAA0', u'success': True}

等词典      

要获取包含该记录的所有信息的字典,   使用方法:

     

contact = sf.Contact.get('003e0000003GuNXAA0')

     

要获取包含该记录的所有信息的字典,请使用定义为外部ID的自定义字段:

     

contact = sf.Contact.get_by_custom_id('My_Custom_ID__c', '22')

     

要更改该联系人的姓氏来自史密斯'琼斯'并添加' John'的名字。使用方法:

     

sf.Contact.update('003e0000003GuNXAA0',{'LastName': 'Jones', 'FirstName': 'John'})

     

删除联系人:

     

sf.Contact.delete('003e0000003GuNXAA0')

因此,更新的答案只需要前两行

from simple_salesforce import Salesforce

sf = Salesforce(username=username, password=password, security_token=security_token,session=session,sandbox=True)
# my_object = sf.Custom_Object__c.get('123456789012345')  # example use