我想从需要我的Windows用户名和密码的网页上获取一些数据.
到目前为止,我有:
opener = build_opener()
try:
page = opener.open("http://somepagewhichneedsmywindowsusernameandpassword/")
print page
except URLError:
print "Oh noes."
Run Code Online (Sandbox Code Playgroud)
这是urllib2支持的吗?我找到了Python NTLM,但这需要我输入我的用户名和密码.有没有办法只是以某种方式获取身份验证信息(例如,如果我改变了network.automatic-ntlm-auth.trusted-uris设置,就像IE一样,或Firefox ).
所以我现在得到了这个:
# 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."
Run Code Online (Sandbox Code Playgroud)
这很好socket_server.py(从这里看).但我得到一个错误400 - 错误的请求.有没有人有任何进一步的想法?
谢谢,
大教堂
msa*_*ers 16
假设您正在Windows上编写客户端代码并需要无缝的NTLM身份验证,那么您应该从python-win32邮件列表中读取Mark Hammond 在NTLM帖子中的Hooking,它基本上回答了同样的问题.这指向Python Win32扩展中包含的sspi示例代码(ActivePython中包含这些代码,也可以在此处下载).
S.L*_*ott -2
网站可以使用多种形式的身份验证。
HTTP 身份验证。浏览器会弹出一个窗口,供您输入用户名和密码。有两种机制:基本机制和摘要机制。页面附带有一个“授权”标头,它告诉浏览器(或使用 urllib2 的程序)要做什么。
在这种情况下,您必须配置 urlopener 以提供授权标头需要查看的答案。您需要构建HTTPBasicAuthHandler或HTTPDigestAuthHandler。
AuthHandlers 需要一个PasswordManager。该密码管理器可以有一个硬编码的用户名和密码(很常见),也可以很聪明,可以从某些 Windows API 计算出您的 Windows 密码。
应用程序身份验证。Web 应用程序将在此处将您引导至一个页面,其中包含您填写的用户名和密码的表单。在这种情况下,您的 Python 程序必须使用 urllib2 执行 POST(带有 data 的请求),其中数据是正确填写的表单。帖子的回复通常包含一个 cookie,它允许您进一步访问。你不需要太担心 cookie,urllib2 会自动处理这个问题。
你怎么知道你拥有哪一个?您将标头转储到响应中。urllib2.openurl 的响应包括所有标头(在 中page.info())以及页面内容。
如何使用 urllib、urllib2 和 ClientCookie 通过 Python 脚本登录 phpBB3 论坛?
如何从(非网络)Python 客户端访问经过身份验证的 Google App Engine 服务?
| 归档时间: |
|
| 查看次数: |
20686 次 |
| 最近记录: |