我希望在python中编写一个函数来确认远程服务器上可能存在的文件。
然而,我正在检查的一些下载是301或302重定向的背后。
我尝试过如下使用请求模块:
def exists(path):
r = requests.head(path)
return r.status_code in(200,301,302)
但是,如果文件请求是301/302重定向,则返回True,无论目标文件是否实际存在。即使请求成功重定向到存在的文件,只有200结果返回False。
我会非常感谢任何人对最佳方法的任何建议。
答案 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/'
此工具可以帮助您消除重定向。