这里有一个更好的方式,使用mechanize库。
import mechanize
b = mechanize.Browser()
b.set_proxies({'http': 'yourproxy.corporation.com:3128' })
b.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')]
b.open("http://energywatch.natgrid.co.uk/EDP-PublicUI/Public/InstantaneousFlowsIntoNTS.aspx")
b.select_form(name="form1")
b.form.find_control(name='__EVENTTARGET').readonly = False
b.form['__EVENTTARGET'] = 'a1'
print b.submit().read()
说明了如何指定机械化应该使用代理服务器(也可以使用普通urllib
)。还要注意如何模拟ASP.NET的javascript回传。
编辑:
如果您的代理服务器使用NTLM身份验证,这可能是问题。 AFAIK urllib2不处理NTLM身份验证。你可以试试NTLM Authorization Proxy Server。从readme file:
什么是'NTLM授权代理服务器'?
“NTLM授权代理服务器”是代理类软件,将授权你 在MS代理服务器和Web服务器(ISS尤其是)使用MS专有NTLM 授权的方法,它可以改变一些价值客户的请求头 使得这些请求将看起来像由MS IE作出的。它是用Python 语言编写的。请参阅www.python.org。
我试过了,使用b.set_proxies({ 'HTTP': '用户名:密码@访问代理服务器:80'})为我set_proxies字符串,但得到这个错误: HTTP错误407:需要代理身份验证(ISA Server需要授权才能完成请求,拒绝访问Web代理过滤器 这就是为什么我切换到使用COM + IE作为解决方法的原始原因,任何想法如何解决这个问题? 感谢您的帮助 – Brendan 2009-07-15 14:24:59