您的位置:首页 > 编程语言 > Python开发

python urllib2 代理无效分析-NTLM

2009-07-16 18:27 357 查看
查了许久用urllib2通过代理访问网络的贴子,也写了测试代码,但是一直failed.Error Code: 407 Proxy Authentication Required. The ISA Server requires authorization to fulfill the request. Access to the Web Proxy filter is denied. (12209)

最后打算放弃用变通的方法现实现.
用curl库,网上找了下有对应python的接口----(pycurl)
马上down下,安装测试

测试code:

#coding=utf-8

import pycurl
c = pycurl.Curl()
c.setopt(pycurl.URL, 'http://www.ifeng.com')
import StringIO
b = StringIO.StringIO()
c.setopt(pycurl.WRITEFUNCTION, b.write)
c.setopt(pycurl.FOLLOWLOCATION, 1)
c.setopt(pycurl.MAXREDIRS, 5)
c.setopt(pycurl.PROXY, 'http://10.10.10.10:8080')
c.setopt(pycurl.PROXYUSERPWD, 'username:password')
c.perform()
print b.getvalue()
得到的结果还是:Error Code: 407 Proxy Authentication Required.

突然想起公司的OA都要加入域用代理才能上网。
又google下,搜到以下东东:
NTLM 身份验证
在网络环境中,NTLM (NT LAN Manager)用作身份验证协议以处理两台计算机(其中至少有一台计算机运行 Windows NT 4.0 或更早版本)之间的事务。具有此配置的网络称为“混合模式”,这是 Windows Server 2003 家族中的默认设置。
例如,以下配置将使用 NTLM 作为身份验证机制:
Windows 2000 或 Windows XP Professional 客户端向 Windows NT 4.0 的域控制器验证身份。

Windows NT 4.0 Workstation 客户端向 Windows 2000 或 Windows Server 2003 域控制器验证身份。

Windows NT 4.0 Workstation 客户端向 Windows NT 4.0 域控制器验证身份。

Windows NT 4.0 域中的用户向 Windows 2000 或运行 Windows Server 2003 家族的域验证身份。

运行向任何域控制器验证身份的 Windows 95、Windows 98 或 Windows Millennium Edition 的客户端。

另外,NTLM 是为没有加入到域中的计算机(如独立服务器和工作组)提供的身份验证协议。

分析后加上:c.setopt(pycurl.PROXYAUTH, pycurl.HTTPAUTH_NTLM)。功能OK。真是曲折啊。
不过还有其它好多认证方式,以后用代理不行,可以换个方向用其它认证试试。

有空用这个东东在linux下试试:
使用ntlmaps (http://sourceforge.net/projects/ntlmaps/)穿过 MSPROXY(ISA) ,Linux 上网不用愁(参考文章:http://www.chinaunix.net/jh/4/227822.html)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: