为什么没有urllib2扔掉404?

时间:2015-04-21 09:45:21

标签: python google-drive-api urllib2

我在Google云端硬盘中有一个公用文件夹,用于存储图片。

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

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

即使此文件夹中没有此名称的文件,此代码也不会抛出异常并且正在打印" 200"作为返回码。我已经检查了我的浏览器,这个网址(http://googledrive.com/host/0B7K23HtYjKyBfnhYbkVyUld3YUVqSWgzWm1uMXdrMzQ0NlEwOXVUd3o0MWVYQ1ZVMlFSNms/0000.png)在重定向后会返回404。

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

1 个答案:

答案 0 :(得分:1)

当您提出请求时,您的请求会转到Google的网络服务器并在那里处理。当且仅当谷歌的服务器返回404时,你会看到404结束; urllub2简单地封装了底层的握手和数据传输逻辑。

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

但是,如果您通过身份验证然后打开网址(基本上已登录到您的gmail / googgle docs帐户),则会收到404错误。