python断点续传

#coding=utf-8
__author__ = 'zengqingming'

import urllib
import os
import sys

default_encoding = 'utf-8'
if sys.getdefaultencoding() != default_encoding:
    reload(sys)
    sys.setdefaultencoding(default_encoding)
#关键在206和416的状态处理
class myURLOpener(urllib.FancyURLopener):
    def http_error_206(self, url, fp, errcode, errmsg, headers, data=None):
        pass

def downloadFile():
    loop = 1
    dlFile = "xxx.apk"
    existSize = 0
    myUrlclass = myURLOpener()
    if os.path.exists(dlFile):
        outputFile = open(dlFile,"ab")
        existSize = os.path.getsize(dlFile)
        #If the file exists, then only download the remainder
        myUrlclass.addheader("Range","bytes=%s-" % (existSize))
    else:
        outputFile = open(dlFile,"wb")

    url = "http://xxx.com/20131213/%s" % dlFile
    print url
    webPage = myUrlclass.open(url)
    responsedCode = webPage.getcode()
    if responsedCode == 416:
        loop = 0
        print "Requested Range not satisfiable"

    contentLength = webPage.headers['Content-Length']
    print "contentLength:%s - existSize:%d " % (contentLength, existSize)
    #If the file exists, but we already have the whole thing, don't download again
    if int(contentLength) == existSize:
        loop = 0
        print "File already downloaded"

    numBytes = 0
    while loop:
        data = webPage.read(8192)
        if not data:
            break
        outputFile.write(data)
        numBytes = numBytes + len(data)
        #print "data:%s" % data
        print "read " , len(data) , " bytes"

    webPage.close()
    outputFile.close()

    for k,v in webPage.headers.items():
        print k, "=",v
    print "code:", webPage.getcode()
    print "copied", numBytes, "bytes from", webPage.url


if __name__ == "__main__":
    downloadFile()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值