尽管301或302重定向,我怎样才能检测到URL确实存在?

时间:2015-06-17 22:52:50

标签: python-2.7 url

我希望在python中编写一个函数来确认远程服务器上可能存在的文件。

然而,我正在检查的一些下载是301或302重定向的背后。

我尝试过如下使用请求模块:

def exists(path):
    r = requests.head(path)
    return r.status_code in(200,301,302)

但是,如果文件请求是301/302重定向,则返回True,无论目标文件是否实际存在。即使请求成功重定向到存在的文件,只有200结果返回False。

我会非常感谢任何人对最佳方法的任何建议。

2 个答案:

答案 0 :(得分:1)

如果您只想使用stdlib,请使用diveintopython中列出的步骤(复制并稍微清除后的文字)。否则,使用更细微的东西(如Mechanize)来跟踪重定向。

class SmartRedirectHandler(urllib2.HTTPRedirectHandler):     
    def http_error_301(self, req, fp, code, msg, headers):  
        result = urllib2.HTTPRedirectHandler.http_error_301( 
            self, req, fp, code, msg, headers)              
        result.status = code                                 
        return result                                       

def http_error_302(self, req, fp, code, msg, headers):   
    result = urllib2.HTTPRedirectHandler.http_error_302(
        self, req, fp, code, msg, headers)              
    result.status = code                                
    return result   

>>> opener = urllib2.build_opener(SmartRedirectHandler())
>>> resp = opener.open(urllib2.Request("http://www.redirector.com/whatever")
>>> resp.url
'http://www.redirector.com/actual/resource.mkv'

答案 1 :(得分:0)

您目前使用的方法正在按照其设计的方式运行。我建议使用其他功能:

import urllib
page = urllib.urlopen('http://google.com')
page.geturl()
--> 'http://www.google.com/'

此工具可以帮助您消除重定向。