通过Python开发的文件下载器,支持断点续传
发布时间:2023-12-13 07:28:43
实现一个文件下载器,支持断点续传功能,可以使用Python的requests库来实现。
首先,我们需要导入所需的库:
import requests import os
接下来,我们定义一个Downloader类,其中包含下载文件的相关方法。
class Downloader:
def __init__(self, url, filename):
self.url = url
self.filename = filename
def get_size(self):
response = requests.head(self.url)
if response.status_code == 200:
return int(response.headers['Content-Length'])
else:
raise Exception("Invalid URL")
def download(self):
size = self.get_size()
if os.path.isfile(self.filename):
downloaded_size = os.path.getsize(self.filename)
headers = {"Range": f"bytes={downloaded_size}-{size}"}
mode = "ab"
else:
headers = {}
mode = "wb"
response = requests.get(self.url, headers=headers, stream=True)
with open(self.filename, mode) as file:
for chunk in response.iter_content(chunk_size=8192):
file.write(chunk)
print("Download complete!")
在上面的代码中,__init__方法初始化下载器对象,接收文件的URL和输出文件名作为参数。
get_size方法发送HEAD请求获取文件的大小。
download方法负责实际的文件下载工作。使用requests.get方法发送GET请求,通过stream=True参数以流的方式获取文件内容。如果文件已存在,则通过设置headers的Range字段来实现断点续传。如果文件不存在,则以写入二进制模式打开文件。
然后,我们可以使用下载器来下载文件。例如:
if __name__ == "__main__":
url = "http://example.com/file.zip"
filename = "file.zip"
downloader = Downloader(url, filename)
downloader.download()
以上代码指定了文件的URL和输出文件名。然后创建一个Downloader对象并调用download方法来开始下载。如果文件已存在,则会从上次下载停止的地方继续下载;否则,会从头开始下载。
这就是一个简单的文件下载器,支持断点续传功能的实现。你可以使用该下载器下载任何文件,并在需要时暂停、继续或重新下载文件。
