我有一个python脚本,它只是用urllib2抓取一个页面,然后继续使用BeautifulSoup来解析那些东西。代码是:
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)
我正在尝试访问的系统是远程的,并且在linux路由器后面,它在公共静态IP和实际系统的lan ip之间进行端口转发。
我在某些系统上遇到了失败,起初我想到了urllib2 / python中的一个错误,或者一些奇怪的TCP内容(http服务器实际上是某个工业系统中的嵌入式卡)。但后来我尝试了其他系统,并且urllib2按预期工作,即使在urllib2失败的系统上,我也可以使用links2或wget正确访问http服务器。
我已经在linux路由器(http服务器端)上验证了tcpdump,并且urllib2总是在有问题的系统中完成tcp握手,但是它似乎挂在那里。我试图打开/关闭syncookies和ECN,但这并没有改变任何东西。
我如何调试并可能解决此问题?
答案 0 :(得分:0)
您还可以切换为使用httplib2
。
答案 1 :(得分:0)
在将近17个月后,我再也无法访问该特定系统,因此我无法接受这个问题的任何真实答案。
至少我可以告诉未来的读者不的答案是什么:
欢呼声。