python-ntlm(官网地址:http://code.google.com/p/python-ntlm/)模块给urllib2模块提供了ntlm验证功能,而suds是基于urllib2实现的Web Service工具包,所以只要把两者结合来使用就可以实现python访问SharePoint Web Service的功能了。
经过研究suds的代码发现,suds是通过使用Transport进行基本的用户验证,它只提供了一个简单的HttpTransport。当然,这个HttpTransport是不支持NTLM验证,所以我实现了自已的WindowsTransport来解决这个问题。
最后是测试代码:
Test
1#用户名
2username = 'FLYSUN\\Administrator'
3#用户密码
4password = "*******"
5#访问url
6url = "http://flysun/_vti_bin/sitedata.asmx"
7wsdl=url+"?WSDL"
8
9from suds import WebFault
10from suds.client import *
11from suds.transport.http import *
12from WindowsTransport import *
13
14transport= WindowsTransport(wsdl,username,password)
15
16client = Client(wsdl ,transport=transport)
17
18print client.wsdl
19
20
21
22
输出的结果:
1#用户名
2username = 'FLYSUN\\Administrator'
3#用户密码
4password = "*******"
5#访问url
6url = "http://flysun/_vti_bin/sitedata.asmx"
7wsdl=url+"?WSDL"
8
9from suds import WebFault
10from suds.client import *
11from suds.transport.http import *
12from WindowsTransport import *
13
14transport= WindowsTransport(wsdl,username,password)
15
16client = Client(wsdl ,transport=transport)
17
18print client.wsdl
19
20
21
22
Result
1(Definitions){
2 id = "Definitions:0x406b918"
3 options = <suds.options.Options object at 0x01FD9770>
4 url = "http://flysun/_vti_bin/sitedata.asmx?WSDL"
5 tns[] =
6 "tns",
7 "http://schemas.microsoft.com/sharepoint/soap/",
8 types[] =
9 (Types){
10 definitions = (Definitions)
11 },
12 .
13 ..
1(Definitions){
2 id = "Definitions:0x406b918"
3 options = <suds.options.Options object at 0x01FD9770>
4 url = "http://flysun/_vti_bin/sitedata.asmx?WSDL"
5 tns[] =
6 "tns",
7 "http://schemas.microsoft.com/sharepoint/soap/",
8 types[] =
9 (Types){
10 definitions = (Definitions)
11 },
12 .
13 ..