• 断点续传


    •断点续传的过程

      1)断点续传需要在下载过程中记录每天线程的下载进度

      2)每次下载开始之前先读取数据库,查询是否有未完成的记录,有就继续下载,没有则创建新的记录插入数据库

      3)在每次向文件中写入数据之后,在数据库中更新下载进度

      4)下载完成之后删除数据库中的下载记录。

      HTTP请求是由一个header的,里面有Range属性是定义下载区域的,他接收的值是一个区间范围。如:Range:bytes=0-10000;这样我们就可以按照一定的规则,将一个大文件拆分为若干很小的部分,然后分批次进行下载,每个小块下载完成之后,再合并到一个文件中。这样即使下载中断,重新下载时,也可以通过文件的字节长度来判断下载的起始点,然后重启断点续传的过程。

    •Range一般格式:

      用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式:

      Range:(unit=first byte pos)-[last byte pos] 

    •Content-Range

      用于响应头,指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式: 

      Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth] 

    •一个简单的断点续传下载的例子

    #encoding=utf-8
    #python 2.7.10
    #xiaodeng
    
     
    import urllib2  
      
    req = urllib2.Request('http://www.163.com/')  
    req.add_header('Range', 'bytes=0-20') #断点续传的实现关键。一般断点续传时会用到Range和Content-Range实体头。
    res = urllib2.urlopen(req)  
      
    data = res.read()  
      
    print data  
    print '---------'  
    print 'len:%d'%len(data)  

    >>> req = urllib2.Request('http://www.163.com/')
    >>> help(req.add_header)
    Help on method add_header in module urllib2:
    
    add_header(self, key, val) method of urllib2.Request instance
  • 相关阅读:
    重新想象 Windows 8 Store Apps (46)
    重新想象 Windows 8 Store Apps (45)
    重新想象 Windows 8 Store Apps (44)
    重新想象 Windows 8 Store Apps (43)
    重新想象 Windows 8 Store Apps (42)
    重新想象 Windows 8 Store Apps (41)
    重新想象 Windows 8 Store Apps (40)
    重新想象 Windows 8 Store Apps (39)
    重新想象 Windows 8 Store Apps (38)
    重新想象 Windows 8 Store Apps (37)
  • 原文地址:https://www.cnblogs.com/dengyg200891/p/4930894.html
Copyright © 2020-2023  润新知