簡體   English   中英

如何檢查python是否可以從http服務器下載文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM