[英]how to check in python if file can be downloaded from http server
我的內容有兩個Artifactory服務器AF1和AF2,
AF1已通過OPENID認證,AF2已通過簡單uid / pwd認證
我使用python腳本從AF2下載文件,現在我想知道文件是否存在,我可以使用下面的簡單功能來做到這一點,
我面臨的問題是URL列表是動態的,並且從AF1更改為AF2,但是由於文件在兩個服務器中均退出,因此兩種情況下的返回碼均為200,我想知道是否有辦法知道文件是否可以先下載還是不下載,以便我處理
def check_file(url, uid, pwd):
print 'checking ' + url
request = urllib2.Request(url)
base64string = base64.encodestring('%s:%s' % (uid, pwd)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
try:
connection = urllib2.urlopen(request)
#print connection.getcode()
#connection.close()
return 0
except urllib2.HTTPError, e:
#print e.getcode()
return 1
添加了額外的子句以檢查文件的大小,這對於AF1服務器失敗,因為它只是說文件存在但未提供文件屬性的詳細信息,可以通過以下更改來解決此問題
def check_file(網址,uid,密碼):
print 'checking ' + url
request = urllib2.Request(url)
base64string = base64.encodestring('%s:%s' % (uid, pwd)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
request.get_method = lambda : 'HEAD'
try:
connection = urllib2.urlopen(request)
data = connection.info()
connection.close()
try:
file_size = int(data.getheaders("Content-Length")[0])
return 0
except IndexError, e:
return 1
except urllib2.HTTPError, e:
print e.getcode()
return 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.