【问题标题】:Connecting to Microsoft Dynamics CRM 2011 SDK from Python从 Python 连接到 Microsoft Dynamics CRM 2011 SDK
【发布时间】:2011-12-17 22:42:03
【问题描述】:

有没有人使用 Python 连接到 Microsoft Dynamics CRM 2011 中的 2011 端点?我已经安装了 SUDS 并且可以获取 WSDL,但是服务调用返回 400 Bad Request。我确定这是因为我没有通过身份验证,但我不太确定如何使用原始 SOAP 进行身份验证。我知道Girish's code sample,但对 SOAP 还不够熟悉,无法走得更远。

我看到有人问过a year ago on 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)

【问题讨论】:

  • 在这方面有过成功吗?
  • 不,不幸的是,它从来没有成功过并且对这个项目失去了兴趣。

标签: python dynamics-crm dynamics-crm-2011


【解决方案1】:

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

【讨论】:

  • 遗憾的是,REST Odata 服务不可用于外部服务:“身份验证只能在应用程序内进行。REST 端点的使用仅限于 JScript 库或 Silverlight Web 资源。” msdn.microsoft.com/en-us/library/gg334279.aspx
  • 如果你在浏览器中模仿一个人,你可以从外部使用REST接口来获取cookie中的auth内容,然后使用cookie进行后续请求。我使用“请求”(用于 HTTP 通信)和“BeautifulSoup”(用于抓取器样式解析)的组合来跳过箍登录。代码看起来或多或少像一个迷你抓取器。由于我们的登录是由本地专有云提供商提供的,因此我的代码可能不会被大量使用。值得注意的是,在某些方面,例如结果集大小,REST 接口是有限的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
相关资源
最近更新 更多