1

我的内容有两台 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
4

1 回答 1

1

添加了额外的子句来检查文件的大小,这对于 AF1 服务器来说失败了,因为它只是说文件存在但没有提供文件属性的详细信息,可以通过以下更改来解决这个问题

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)
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
于 2013-08-30T05:38:25.767 回答