这是一个更好的方法,使用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()
请注意如何指定 mechanize 应使用代理服务器(也可以使用 plain urllib
)。还要注意 ASP.NETs javascript postback 是如何模拟的。
编辑:
如果您的代理服务器使用 NTLM 身份验证,则可能是问题所在。AFAIK urllib2 不处理 NTLM 身份验证。你可以试试NTLM Authorization Proxy Server。从自述文件:
什么是“NTLM 授权代理服务器”?
“NTLM 授权代理服务器”是一个类似代理的软件,它将使用 MS 专有的 NTLM 授权方法在 MS 代理服务器和 Web 服务器(尤其是 ISS)上授权您,它可以更改客户端请求标头中的一些值,以便这些请求看起来像 MS IE 制作的。它是用 Python 语言编写的。请参阅 www.python.org。