如果文件可以从https下载,如何签入python

2024-05-19 05:53:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个工件服务器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

Tags: 文件服务器urluidreturnrequestpwdurllib2
1条回答
网友
1楼 · 发布于 2024-05-19 05:53:28

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

def check_文件(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

相关问题 更多 >

    热门问题