当前位置:  开发笔记 > 编程语言 > 正文

使用Python和urllib2进行Windows身份验证

如何解决《使用Python和urllib2进行Windows身份验证》经验,为你挑选了1个好方法。

我想从需要我的Windows用户名和密码的网页上获取一些数据.

到目前为止,我有:

opener = build_opener()
try:
    page = opener.open("http://somepagewhichneedsmywindowsusernameandpassword/")
    print page
except URLError:
    print "Oh noes."

这是urllib2支持的吗?我找到了Python NTLM,但这需要我输入我的用户名和密码.有没有办法只是以某种方式获取身份验证信息(例如,如果我改变了network.automatic-ntlm-auth.trusted-uris设置,就像IE一样,或Firefox ).

在msander的回答之后编辑

所以我现在得到了这个:

# Send a simple "message" over a socket - send the number of bytes first,
# then the string.  Ditto for receive.
def _send_msg(s, m):
    s.send(struct.pack("i", len(m)))
    s.send(m)

def _get_msg(s):
    size_data = s.recv(struct.calcsize("i"))
    if not size_data:
        return None
    cb = struct.unpack("i", size_data)[0]
    return s.recv(cb)

def sspi_client():
    c = httplib.HTTPConnection("myserver")
    c.connect()
    # Do the auth dance.
    ca = sspi.ClientAuth("NTLM", win32api.GetUserName())
    data = None
    while 1:
        err, out_buf = ca.authorize(data) # error 400 triggered by this line
        _send_msg(c.sock, out_buf[0].Buffer)

        if err==0:
            break

        data = _get_msg(c.sock)

    print "Auth dance complete - sending a few encryted messages"
    # Assume out data is sensitive - encrypt the message.
    for data in "Hello from the client".split():
        blob, key = ca.encrypt(data)
        _send_msg(c.sock, blob)
        _send_msg(c.sock, key)
    c.sock.close()
    print "Client completed."

这很好socket_server.py(从这里看).但我得到一个错误400 - 错误的请求.有没有人有任何进一步的想法?

谢谢,

大教堂



1> msanders..:

假设您正在Windows上编写客户端代码并需要无缝的NTLM身份验证,那么您应该从python-win32邮件列表中读取Mark Hammond 在NTLM帖子中的Hooking,它基本上回答了同样的问题.这指向Python Win32扩展中包含的sspi示例代码(ActivePython中包含这些代码,也可以在此处下载).

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有