我正在使用 Suds 通过肥皂访问 Sharepoint 列表,但我在使用格式不正确的肥皂时遇到了一些问题。
我正在使用以下代码:
from suds.client import Client
from suds.sax.element import Element
from suds.sax.attribute import Attribute
from suds.transport.https import WindowsHttpAuthenticated
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.client').setLevel(logging.DEBUG)
ntlm = WindowsHttpAuthenticated(username='somedomain\\username', password='password')
url = "http://somedomain/sites/somesite/someothersite/somethirdsite/_vti_bin/Lists.asmx?WSDL"
client = Client(url, transport=ntlm)
result = client.service.GetListCollection()
print repr(result)
每次我运行它时,我都会得到错误 400 Bad request 的结果。当我启用调试时,我可以看到生成的信封:
<SOAP-ENV:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://schemas.microsoft.com/sharepoint/soap/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<ns0:Body>
<ns1:GetListCollection/>
</ns0:Body>
</SOAP-ENV:Envelope>
...带有此错误消息:
DEBUG:suds.client:http failed:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request</h2>
<hr><p>HTTP Error 400. The request is badly formed.</p>
</BODY></HTML>
通过 SoapUI 运行相同的 WSDL(以及原始信封数据),请求会返回预期的值。任何人都可以看到为什么我使用 Suds as SoapUI 得到不同结果的任何明显原因以及我该如何纠正这个问题?
更新:在不同的 Sharepoint 站点(即不是名称中带有空格的子子站点)和 Java(JAX-WS,它在同一个站点也有问题,但是,不同的问题)上测试了完全相同的代码之后,它看起来好像它按预期工作。因此,我想知道两个细节之一是否可能是这些问题的原因:
- SOAP 实现与 Sharepoint 中的子子站点存在一些问题?
- SOAP 实现在其名称中存在一些空格问题,即使使用 %20 作为替代?
我仍然需要使用原始 URL 来解决这些问题,因此我们将不胜感激任何输入。我假设由于 SoapUI 使用原始 url,应该可以纠正任何错误。