从Python连接到Microsoft Dynamics CRM 2011 SDK

3
有没有人尝试过使用Python连接Microsoft Dynamics CRM 2011中的2011端点?我安装了SUDS并可以获取WSDL,但服务调用返回400 Bad Request。我确定这是因为我没有经过身份验证,但我不太确定如何使用原始SOAP进行身份验证。我知道Girish的代码示例,但对SOAP不够熟悉,无法继续深入了解。
我看到在SO上一年前有人提出了同样的问题,但那个问题似乎是关于NTLM的。在我的情况下,我想使用WS-Trust。
以下是我现有的代码:
from suds.client import Client
import logging

logging.basicConfig(level=logging.INFO)

url = 'https://dev.crm.dynamics.com/XRMServices/2011/Discovery.svc?wsdl'
client = Client(url)

req = client.factory.create('ns3:RetrieveOrganizationsRequest')
accessTypes = client.factory.create('ns3:AccessType')
orgRel = client.factory.create('ns3:OrganizationRelease')
req.AccessType = accessTypes.Default
req.Release = orgRel.Current

headers = dict()
headers['Content-Type'] = 'application/soap+xml'
client.set_options(headers=headers)

resp = client.service.Execute(req)

你曾经在这方面取得过任何成功吗? - JiminyCricket
很遗憾,我从未使其运行起来并对该项目失去了兴趣。 - Matt Cooper
1个回答

0
如果不需要使用SOAP,可以考虑使用RESTish Odata服务。我不是Python专家,但你可以在浏览器中运行GET请求,并使用调试工具查看浏览器发送的标头,然后在Python代码中模仿它。你还可以通过修改Content-Type标头来选择服务返回的格式(JSON或XML)。

很遗憾,REST Odata服务不对外开放: “身份验证仅限于应用程序内部使用。 REST端点的使用仅限于JScript库或Silverlight Web资源。” - toast38coza
如果你模仿浏览器中的一个人来获取cookie中的auth信息,然后使用cookie进行后续请求,就可以从外部使用REST接口。我使用了'requests'(用于HTTP通信)和'BeautifulSoup'(用于解析器样式解析)的组合来跳过登录的步骤。代码看起来更像是一个小型的爬虫。由于我们的登录是由本地专有云提供商提供的,所以我的代码可能不会有太大的用处。值得注意的是,在某些方面,例如结果集大小,REST接口是有限制的。 - Sam Svenbjorgchristiensensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接