为什么 urllib2 不抛出 404?

Why doesn't urllib2 throw a 404?

我在 Google 驱动器中有一个 public 文件夹,我在其中存储图片。

在 Python 中,我试图检测是否存在具有特定名称的图片。我正在使用此代码:

import urllib2
url = "http://googledrive.com/host/0B7K23HtYjKyBfnhYbkVyUld3YUVqSWgzWm1uMXdrMzQ0NlEwOXVUd3o0MWVYQ1ZVMlFSNms/0000.png"
resp = urllib2.urlopen(url)
print resp.getcode()

即使此文件夹中没有同名文件,此代码也不会抛出异常并打印“200”作为 return 代码。我已经检查了我的浏览器,这个 URL (http://googledrive.com/host/0B7K23HtYjKyBfnhYbkVyUld3YUVqSWgzWm1uMXdrMzQ0NlEwOXVUd3o0MWVYQ1ZVMlFSNms/0000.png) 在几次重定向后确实 return 404。

为什么 urllib2 没有检测到这个文件实际上不存在?

当您发出请求时,您的请求会转到 google 的网络服务器并在那里进行处理。当且仅当 google 的服务器是 return 404 时,您会看到 404 吗? urllub2简单封装了底层的握手和数据传输逻辑。

在这种特殊情况下,google 的服务器端代码要求对请求进行身份验证,而您的请求 url 只是未经身份验证。因此,请求被重定向到登录页面,并且由于这是一个有效的现有 page/response,urllib2 显示正确的代码 200。您可以 get the same page if you open the link in a private window.

但是,如果您通过身份验证然后打开 url(基本上登录到您的 gmail/googgle 文档帐户),您将收到 404 错误。