Python 通过ISA 代理访问互联网报错 HTTP Error 407

urllib2.HTTPError: HTTP Error 407: Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy service is denied.  )

代码如下:

#!/python
# coding = utf-8  
from urllib import urlencode
import cookielib, urllib2

webURL = "http://www.google.com"

# prepare the cookie
cj = cookielib.LWPCookieJar();
cookie_support = urllib2.HTTPCookieProcessor(cj)


# set the proxy server
proxy_info = {
              'user' : 'scmroad',
              'pass' : 'pass',
              'host' : '192.168.1.101',
              'port' :  9876
              }
proxy_support = urllib2 . ProxyHandler ( {'http':\
                                          'http://%(user)s:%(pass)s@%(host)s:%(port)d' % proxy_info})

# construct the opener
opener = urllib2. build_opener(cookie_support, proxy_support)
urllib2.install_opener(opener)

page = urllib2.urlopen(webURL)
print page.read(1000)
page.close()


出错信息如下:
C:\script\webpy>python test.py
Traceback (most recent call last):
  File "test.py", line 27, in <module>
    page = urllib2.urlopen(webURL)
  File "C:\Python27\lib\urllib2.py", line 126, in urlopen
    return _opener.open(url, data, timeout)
  File "C:\Python27\lib\urllib2.py", line 398, in open
    response = meth(req, response)
  File "C:\Python27\lib\urllib2.py", line 511, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python27\lib\urllib2.py", line 436, in error
    return self._call_chain(*args)
  File "C:\Python27\lib\urllib2.py", line 370, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 519, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 407: Proxy Authentication Required ( The ISA Server requires authorization to fulfill the request. Access to the Web Proxy service is denied.  )
C:\script\webpy>


python urllib2 代理无效分析-NTLM

查了许久用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。真是曲折啊。
不过还有其它好多认证方式,以后用代理不行,可以换个方向用其它认证试试。



你可能感兴趣的:(windows,python,互联网,server,Authentication,authorization)