mirror of
https://github.com/codex-storage/deluge.git
synced 2025-02-18 14:26:24 +00:00
Added support for sending headers when using download_file.
Allows HTTP conditional GET for servers which support it.
This commit is contained in:
parent
d592c0370c
commit
d3d991d8aa
@ -41,16 +41,17 @@ class HTTPDownloader(client.HTTPDownloader):
|
|||||||
"""
|
"""
|
||||||
Factory class for downloading files and keeping track of progress.
|
Factory class for downloading files and keeping track of progress.
|
||||||
"""
|
"""
|
||||||
def __init__(self, url, filename, part_callback=None):
|
def __init__(self, url, filename, part_callback=None, headers=None):
|
||||||
"""
|
"""
|
||||||
:param url: str, the url to download from
|
:param url: str, the url to download from
|
||||||
:param filename: str, the filename to save the file as
|
:param filename: str, the filename to save the file as
|
||||||
:param part_callback: func, a function to be called when a part of data
|
:param part_callback: func, a function to be called when a part of data
|
||||||
is received, it's signature should be: func(data, current_length, total_length)
|
is received, it's signature should be: func(data, current_length, total_length)
|
||||||
|
:param headers: dict, any optional headers to send
|
||||||
"""
|
"""
|
||||||
self.__part_callback = part_callback
|
self.__part_callback = part_callback
|
||||||
self.current_length = 0
|
self.current_length = 0
|
||||||
client.HTTPDownloader.__init__(self, url, filename)
|
client.HTTPDownloader.__init__(self, url, filename, headers=headers)
|
||||||
|
|
||||||
def gotStatus(self, version, status, message):
|
def gotStatus(self, version, status, message):
|
||||||
self.code = int(status)
|
self.code = int(status)
|
||||||
@ -77,7 +78,7 @@ class HTTPDownloader(client.HTTPDownloader):
|
|||||||
|
|
||||||
return client.HTTPDownloader.pagePart(self, data)
|
return client.HTTPDownloader.pagePart(self, data)
|
||||||
|
|
||||||
def download_file(url, filename, callback=None):
|
def download_file(url, filename, callback=None, headers=None):
|
||||||
"""
|
"""
|
||||||
Downloads a file from a specific URL and returns a Deferred. You can also
|
Downloads a file from a specific URL and returns a Deferred. You can also
|
||||||
specify a callback function to be called as parts are received.
|
specify a callback function to be called as parts are received.
|
||||||
@ -86,10 +87,14 @@ def download_file(url, filename, callback=None):
|
|||||||
:param filename: str, the filename to save the file as
|
:param filename: str, the filename to save the file as
|
||||||
:param callback: func, a function to be called when a part of data is received,
|
:param callback: func, a function to be called when a part of data is received,
|
||||||
it's signature should be: func(data, current_length, total_length)
|
it's signature should be: func(data, current_length, total_length)
|
||||||
|
:param headers: dict, any optional headers to send
|
||||||
|
:raises t.w.e.PageRedirect: when server responds with a temporary redirect
|
||||||
|
or permanently moved.
|
||||||
|
:raises t.w.e.Error: for all other HTTP response errors (besides OK)
|
||||||
"""
|
"""
|
||||||
url = str(url)
|
url = str(url)
|
||||||
scheme, host, port, path = client._parse(url)
|
scheme, host, port, path = client._parse(url)
|
||||||
factory = HTTPDownloader(url, filename, callback)
|
factory = HTTPDownloader(url, filename, callback, headers)
|
||||||
if scheme == "https":
|
if scheme == "https":
|
||||||
from twisted.internet import ssl
|
from twisted.internet import ssl
|
||||||
reactor.connectSSL(host, port, factory, ssl.ClientContextFactory())
|
reactor.connectSSL(host, port, factory, ssl.ClientContextFactory())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user