Python urlopen 连接中止 - urlopen 错误 [Errno 10053]
我有一些代码,使用了mechanize和beautifulsoup来抓取网页上的数据。这段代码在我的测试机器上运行得很好,但在生产机器上却被阻止了连接。我遇到的错误是:
urlopen error [Errno 10053] An established connection was aborted by the software in your host machine
我看过类似的问题,但找不到这个具体的错误。我尝试抓取的网站是HTTPS的,不过我在HTTP网站上也遇到过同样的错误。我使用的是python 2.6和mechanize 0.2.4。
这个问题是因为代理设置,还是像错误信息说的,和我本地机器有关呢?我已经设置了mechanize使用系统的代理:
br = mechanize.Browser()
br.addheaders = [('User-agent', 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1')]
br.set_proxies({}) #will use system default proxy
page = br.open(url)
html = page.read()
soup = BeautifulSoup.BeautifulSoup(html)
再次强调,这一切在我的测试机器上都能正常工作,但生产机器却出现了错误10053。
1 个回答
3
这里的问题是,有一个基于主机的入侵检测系统(HIDS)阻止了外部连接。问题解决了。
我把我的Python脚本添加到了HIDS的例外列表中。这个例外列表就是我允许连接互联网的文件列表。一旦把脚本添加到这个列表里,我就能顺利地通过网络使用这个脚本,也没有再遇到问题。测试机器上没有安装HIDS客户端,所以它才允许我进行外部连接。顺便说一下,两个机器都有防火墙,但只有一台(生产机器)安装了HIDS。
HIDS是“基于主机的入侵检测系统”的缩写。如果网络安全团队让你看不到HIDS,你可能不知道它在哪里。即使你找到了,也无法关闭它。你可以问一下你的安全团队,看看他们能否为你的脚本添加例外。还有一个比较隐蔽的办法是把你的脚本打包成一个exe文件(使用Py2EXE),然后把生成的可执行文件重命名为HIDS例外列表中已经存在的某个文件名。一个不错的选择是重命名为你的浏览器,比如如果Firefox被允许访问互联网,就把你的exe改名为firefox.exe。