python - 某些系统上出现奇怪的 urllib2 故障

标签 python linux networking tcp urllib2

我有一个 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 路由器后面,该路由器在公共(public)静态 ip 和实际系统的 lan ip 之间进行端口转发。

我在某些系统上遇到故障,起初我想到了 urllib2/python 中的错误,或者一些奇怪的 TCP 东西(http 服务器实际上是某些工业系统中的嵌入式卡)。但是后来我尝试了其他系统,urllib2 按预期工作,即使在 urllib2 失败的系统上,我也可以使用 links2 或 wget 正确访问 http 服务器。

  • Ubuntu 10.04 LTS 32 位落后于远程 adsl 上的 Apple Airport nat:一切正常
  • LAN 中的 Mac OSX 10.6 与服务器,在 nat 后面远程等...:一切正常
  • 带有公共(public) ip 的 Ubuntu 10.04 LTS 64 位:urllib2 超时,链接和 wget 工作
  • 具有公共(public) IP 的 Gentoo Linux:urllib2 超时,链接和 wget 工作

我已经在 linux 路由器(http 服务器端)上使用 tcpdump 进行了验证,并且 urllib2 始终可以完成 tcp 握手,即使是来自有问题的系统,但它似乎卡在那里。我尝试打开/关闭 syncookies 和 ECN,但这并没有改变任何东西。

我该如何调试并可能解决这个问题?

最佳答案

您也可以切换到使用 httplib2

关于python - 某些系统上出现奇怪的 urllib2 故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5005176/

相关文章:

php - 无法使文件/目录可由 php 写入

networking - 以编程方式从计算机阻止路由器上的网站

linux - Linux 中两种不同的网关以及被动网关的 ping

python - 如何遍历列表中除最后一项之外的所有内容?

python - 在两个结束标签之间用漂亮的汤解析内容

xml - 如何获取属性的xml值?

java - 为什么我的 UDP 连接停止工作?

python - Django 404 页面未找到 blog.views.post_detail

python - python Hackerrank 中的 EOF 错误

python - 使用 GTK 时保持后台事件处于事件状态