Mechanize似乎忽略了代理?
我正在使用一个http代理和Mechanize模块。我这样初始化mechanize对象并设置代理:
self.br = mechanize.Browser()
self.br.set_proxies({"http": proxyAddress}) #proxy address is like 1.1.1.1:8080
然后我这样打开网站:
response = self.br.open("http://google.com")
我的问题是,mechanize似乎完全不理会这个代理。如果我调试并检查br对象,在代理处理器下我可以看到我的代理设置。然而,即使我给了一个错误的代理,Mechanize还是照常工作,就好像我根本没有设置代理一样。这是怎么回事呢?
补充说明:我还尝试过:
mechanize.install_opener(mechanize.build_opener(mechanize.ProxyHandler({'http': "127.0.0.1:99"})))
response = mechanize.urlopen("http://google.com")
结果它似乎也忽略了我的代理。(我甚至没有给它一个有效的代理,难道它不应该在URLError上失败吗?)
2 个回答
0
如果你想访问一个https的网站,那么你需要把代理设置为https,方法如下:
# Cookie Jar
cj = cookielib.LWPCookieJar()
br.set_cookiejar(cj)
# Browser options
br.set_handle_equiv(True)
br.set_handle_gzip(True)
br.set_handle_redirect(True)
br.set_handle_referer(True)
br.set_handle_robots(False)
# Follows refresh 0 but not hangs on refresh > 0
br.set_handle_refresh(mechanize._http.HTTPRefreshProcessor(), max_time=1)
# Want debugging messages?
#br.set_debug_http(True)
#br.set_debug_redirects(True)
#br.set_debug_responses(True)
# User-Agent (this is cheating, ok?)
br.addheaders = [('User-agent', 'Mozilla/4.0 (Compatible; MSIE 8.0; Windows NT 5.2; Trident/6.0)')]
br.set_proxies({"https": "XXX.XX.246.56:33835"})
1
在邮件列表上讨论后,我搞明白了。
import mechanize
browser = mechanize.Browser()
browser.set_proxies(proxies={"http": "myproxy.example.com:1234"},
proxy_bypass=lambda hostname: False)