使用suds+python-ntlm访问SharePoint Web Service (完美解决Windows的NTLM验证问题)

SharePoint Server 2007 默认是使用ntlm协议验证用户登陆用户的,只使用python常用的WebService 工具包是无法通过NTLM验证的.经过研究,终于找到了完美的解决方案。
  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来解决这个问题。
  
ContractedBlock.gif ExpandedBlockStart.gif WindowsTransport        1#-*-coding=utf-8-*-
 2import urllib2 as u2
 3from suds.transport.http import *
 4from urlparse import urlparse
 5import urllib2 
 6from ntlm import HTTPNtlmAuthHandler
 7
 8class WindowsTransport(HttpTransport):
 9    #类初始化
10    def __init__(self,url,username,password, **kwargs):
11        #调用基类初始化函数
12        HttpTransport.__init__(self,**kwargs)
13        #创建UrlOpener
14        self.urlopener=self.__buildOpener(url,username,password)
15        
16    #创建UrlOpener对象,完成Ntlm用户验证    
17    def __buildOpener(self,url,username,password):
18        passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
19        passman.add_password(None, url, username, password)
20        # create the NTLM authentication handler
21        auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman)
22
23        # create and install the opener
24        opener = urllib2.build_opener(auth_NTLM)
25        return opener
26        
27       
28
在代码里,WindowsTransport是继承HttpTransport,关键是通过python-ntlm的HTTPNtlmAuthHandler完成urlopener的创建,由这个opener里完成ntlm验证。
  最后是测试代码:
ContractedBlock.gif ExpandedBlockStart.gif 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
  输出的结果:
ContractedBlock.gif ExpandedBlockStart.gif 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  ..

转载于:https://www.cnblogs.com/flysun/archive/2009/09/21/1570705.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值