设为首页 收藏本站
查看: 4241|回复: 0

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

[复制链接]

尚未签到

发表于 2015-4-22 09:30:22 | 显示全部楼层 |阅读模式
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来解决这个问题。
  

DSC0000.gif DSC0001.gif WindowsTransport       1 DSC0002.gif #-*-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验证。
  最后是测试代码:

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  输出的结果:

Result
1(Definitions){
2   id = "Definitions:0x406b918"
3   options =
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) DSC0003.gif
11      },
12  .
13  ..

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-59490-1-1.html 上篇帖子: arcgis与python(zz) 下篇帖子: 【Python②】python之首秀
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表