我有一個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