我有一个python脚本,它简单地用urllib2抓取一个页面,然后继续使用BeautifulSoup来解析这些东西。代码是:在某些系统上发生奇怪的urllib2故障
class Foo(Bar):
def fetch(self):
try:
self.mypage = urllib2.urlopen(self.url + 'MainPage.htm', timeout=30).read()
except urllib2.URLError:
sys.stderr.write("Error: system at %s not responding\n" % self.url)
sys.exit(1)
我尝试访问的是远程系统,做公共静态IP和实际系统的LAN IP之间的端口转发一个Linux路由器后面。
我在某些系统上遇到了问题,起初我想到urllib2/python中的一个错误,或者一些奇怪的TCP错误(http服务器实际上是一些工业系统中的嵌入式卡)。但后来我尝试了其他系统,并且urllib2按预期工作,并且即使在urllib2失败的系统上,我也可以使用links2或wget正确访问http服务器。
- 的Ubuntu 10.04落后于远程ADSL苹果机场NAT LTS 32位:对一切工作
- 的Mac OSX 10.6在局域网服务器,远程NAT后面,等...:一切正常
- 的Ubuntu 10.04 LTS 64位与公网IP:urllib2的超时,链接和wget工作
- 的Gentoo Linux与公网IP:urllib2的超时,链接和wget工作
我与Linux的路由器上的tcpdump(http服务器端)和验证urllib2 a即使是从有问题的系统完成tcp握手,但它似乎在那里挂起。我尝试切换/关闭syncookies和ECN,但没有任何改变。
我该如何调试并解决此问题?
检查ICMP重定向。 – 2011-02-15 15:07:01