4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the Revised BSD License.
7 This program is distributed in the hope that it will be useful,
8 but WITHOUT ANY WARRANTY; without even the implied warranty of
9 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 Revised BSD License for more details.
12 Copyright 2016-2023 Game Maker 2k - https://github.com/GameMaker2k
13 Copyright 2016-2023 Kazuki Przyborowski - https://github.com/KazukiPrzyborowski
15 $FileInfo: pywwwget.py - Last Update: 9/16/2023 Ver. 1.0.0 RC 1 - Author: cooldude2k $
18 from __future__
import division
, absolute_import
, print_function
;
19 import re
, os
, sys
, hashlib
, shutil
, platform
, tempfile
, urllib
, gzip
, time
, argparse
, cgi
, subprocess
, socket
;
20 import logging
as log
;
21 from ftplib
import FTP
, FTP_TLS
;
22 from base64
import b64encode
;
29 havemechanize
= False;
34 havemechanize
= False;
49 from httplib2
import HTTPConnectionWithTimeout
, HTTPSConnectionWithTimeout
;
65 if(sys
.version
[0]=="2"):
67 from cStringIO
import StringIO
;
69 from StringIO
import StringIO
;
70 # From http://python-future.org/compatible_idioms.html
71 from urlparse
import urlparse
, urlunparse
, urlsplit
, urlunsplit
, urljoin
;
72 from urllib
import urlencode
;
73 from urllib
import urlopen
as urlopenalt
;
74 from urllib2
import urlopen
, Request
, install_opener
, HTTPError
, URLError
, build_opener
, HTTPCookieProcessor
;
75 import urlparse
, cookielib
;
76 from httplib
import HTTPConnection
, HTTPSConnection
;
77 if(sys
.version
[0]>="3"):
78 from io
import StringIO
, BytesIO
;
79 # From http://python-future.org/compatible_idioms.html
80 from urllib
.parse
import urlparse
, urlunparse
, urlsplit
, urlunsplit
, urljoin
, urlencode
;
81 from urllib
.request
import urlopen
, Request
, install_opener
, build_opener
, HTTPCookieProcessor
;
82 from urllib
.error
import HTTPError
, URLError
;
83 import urllib
.parse
as urlparse
;
84 import http
.cookiejar
as cookielib
;
85 from http
.client
import HTTPConnection
, HTTPSConnection
;
87 __program_name__
= "PyWWW-Get";
88 __program_alt_name__
= "PyWWWGet";
89 __program_small_name__
= "wwwget";
90 __project__
= __program_name__
;
91 __project_url__
= "https://github.com/GameMaker2k/PyWWW-Get";
92 __version_info__
= (1, 0, 0, "RC 1", 1);
93 __version_date_info__
= (2023, 9, 16, "RC 1", 1);
94 __version_date__
= str(__version_date_info__
[0])+"."+str(__version_date_info__
[1]).zfill(2)+"."+str(__version_date_info__
[2]).zfill(2);
95 __revision__
= __version_info__
[3];
96 __revision_id__
= "$Id$";
97 if(__version_info__
[4] is not None):
98 __version_date_plusrc__
= __version_date__
+"-"+str(__version_date_info__
[4]);
99 if(__version_info__
[4] is None):
100 __version_date_plusrc__
= __version_date__
;
101 if(__version_info__
[3] is not None):
102 __version__
= str(__version_info__
[0])+"."+str(__version_info__
[1])+"."+str(__version_info__
[2])+" "+str(__version_info__
[3]);
103 if(__version_info__
[3] is None):
104 __version__
= str(__version_info__
[0])+"."+str(__version_info__
[1])+"."+str(__version_info__
[2]);
106 tmpfileprefix
= "py"+str(sys
.version_info
[0])+__program_small_name__
+str(__version_info__
[0])+"-";
108 pytempdir
= tempfile
.gettempdir();
110 PyBitness
= platform
.architecture();
111 if(PyBitness
=="32bit" or PyBitness
=="32"):
113 elif(PyBitness
=="64bit" or PyBitness
=="64"):
118 compression_supported
= "gzip, deflate";
120 compression_supported
= "gzip, deflate, br";
122 compression_supported
= "gzip, deflate";
124 geturls_cj
= cookielib
.CookieJar();
125 windowsNT4_ua_string
= "Windows NT 4.0";
126 windowsNT4_ua_addon
= {'SEC-CH-UA-PLATFORM': "Windows", 'SEC-CH-UA-ARCH': "x86", 'SEC-CH-UA-BITNESS': "32", 'SEC-CH-UA-PLATFORM': "4.0.0"};
127 windows2k_ua_string
= "Windows NT 5.0";
128 windows2k_ua_addon
= {'SEC-CH-UA-PLATFORM': "Windows", 'SEC-CH-UA-ARCH': "x86", 'SEC-CH-UA-BITNESS': "32", 'SEC-CH-UA-PLATFORM': "5.0.0"};
129 windowsXP_ua_string
= "Windows NT 5.1";
130 windowsXP_ua_addon
= {'SEC-CH-UA-PLATFORM': "Windows", 'SEC-CH-UA-ARCH': "x86", 'SEC-CH-UA-BITNESS': "32", 'SEC-CH-UA-PLATFORM': "5.1.0"};
131 windowsXP64_ua_string
= "Windows NT 5.2; Win64; x64";
132 windowsXP64_ua_addon
= {'SEC-CH-UA-PLATFORM': "Windows", 'SEC-CH-UA-ARCH': "x86", 'SEC-CH-UA-BITNESS': "64", 'SEC-CH-UA-PLATFORM': "5.1.0"};
133 windows7_ua_string
= "Windows NT 6.1; Win64; x64";
134 windows7_ua_addon
= {'SEC-CH-UA-PLATFORM': "Windows", 'SEC-CH-UA-ARCH': "x86", 'SEC-CH-UA-BITNESS': "64", 'SEC-CH-UA-PLATFORM': "6.1.0"};
135 windows8_ua_string
= "Windows NT 6.2; Win64; x64";
136 windows8_ua_addon
= {'SEC-CH-UA-PLATFORM': "Windows", 'SEC-CH-UA-ARCH': "x86", 'SEC-CH-UA-BITNESS': "64", 'SEC-CH-UA-PLATFORM': "6.2.0"};
137 windows81_ua_string
= "Windows NT 6.3; Win64; x64";
138 windows81_ua_addon
= {'SEC-CH-UA-PLATFORM': "Windows", 'SEC-CH-UA-ARCH': "x86", 'SEC-CH-UA-BITNESS': "64", 'SEC-CH-UA-PLATFORM': "6.3.0"};
139 windows10_ua_string
= "Windows NT 10.0; Win64; x64";
140 windows10_ua_addon
= {'SEC-CH-UA-PLATFORM': "Windows", 'SEC-CH-UA-ARCH': "x86", 'SEC-CH-UA-BITNESS': "64", 'SEC-CH-UA-PLATFORM': "10.0.0"};
141 windows11_ua_string
= "Windows NT 11.0; Win64; x64";
142 windows11_ua_addon
= {'SEC-CH-UA-PLATFORM': "Windows", 'SEC-CH-UA-ARCH': "x86", 'SEC-CH-UA-BITNESS': "64", 'SEC-CH-UA-PLATFORM': "11.0.0"};
143 geturls_ua_firefox_windows7
= "Mozilla/5.0 ("+windows7_ua_string
+"; rv:109.0) Gecko/20100101 Firefox/117.0";
144 geturls_ua_seamonkey_windows7
= "Mozilla/5.0 ("+windows7_ua_string
+"; rv:91.0) Gecko/20100101 Firefox/91.0 SeaMonkey/2.53.17";
145 geturls_ua_chrome_windows7
= "Mozilla/5.0 ("+windows7_ua_string
+") AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36";
146 geturls_ua_chromium_windows7
= "Mozilla/5.0 ("+windows7_ua_string
+") AppleWebKit/537.36 (KHTML, like Gecko) Chromium/117.0.0.0 Chrome/117.0.0.0 Safari/537.36";
147 geturls_ua_palemoon_windows7
= "Mozilla/5.0 ("+windows7_ua_string
+"; rv:102.0) Gecko/20100101 Goanna/6.3 Firefox/102.0 PaleMoon/32.4.0.1";
148 geturls_ua_opera_windows7
= "Mozilla/5.0 ("+windows7_ua_string
+") AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 OPR/102.0.0.0";
149 geturls_ua_vivaldi_windows7
= "Mozilla/5.0 ("+windows7_ua_string
+") AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Vivaldi/6.2.3105.48";
150 geturls_ua_internet_explorer_windows7
= "Mozilla/5.0 ("+windows7_ua_string
+"; Trident/7.0; rv:11.0) like Gecko";
151 geturls_ua_microsoft_edge_windows7
= "Mozilla/5.0 ("+windows7_ua_string
+") AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.31";
152 geturls_ua_pywwwget_python
= "Mozilla/5.0 (compatible; {proname}/{prover}; +{prourl})".format(proname
=__project__
, prover
=__version__
, prourl
=__project_url__
);
153 if(platform
.python_implementation()!=""):
154 py_implementation
= platform
.python_implementation();
155 if(platform
.python_implementation()==""):
156 py_implementation
= "Python";
157 geturls_ua_pywwwget_python_alt
= "Mozilla/5.0 ({osver}; {archtype}; +{prourl}) {pyimp}/{pyver} (KHTML, like Gecko) {proname}/{prover}".format(osver
=platform
.system()+" "+platform
.release(), archtype
=platform
.machine(), prourl
=__project_url__
, pyimp
=py_implementation
, pyver
=platform
.python_version(), proname
=__project__
, prover
=__version__
);
158 geturls_ua_googlebot_google
= "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)";
159 geturls_ua_googlebot_google_old
= "Googlebot/2.1 (+http://www.google.com/bot.html)";
160 geturls_ua
= geturls_ua_firefox_windows7
;
161 geturls_headers_firefox_windows7
= {'Referer': "http://google.com/", 'User-Agent': geturls_ua_firefox_windows7
, 'Accept-Encoding': compression_supported
, 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close"};
162 geturls_headers_seamonkey_windows7
= {'Referer': "http://google.com/", 'User-Agent': geturls_ua_seamonkey_windows7
, 'Accept-Encoding': compression_supported
, 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close"};
163 geturls_headers_chrome_windows7
= {'Referer': "http://google.com/", 'User-Agent': geturls_ua_chrome_windows7
, 'Accept-Encoding': compression_supported
, 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close", 'SEC-CH-UA': "\"Google Chrome\";v=\"117\", \"Not;A=Brand\";v=\"8\", \"Chromium\";v=\"117\"", 'SEC-CH-UA-FULL-VERSION': "117.0.5938.63"};
164 geturls_headers_chrome_windows7
.update(windows7_ua_addon
);
165 geturls_headers_chromium_windows7
= {'Referer': "http://google.com/", 'User-Agent': geturls_ua_chromium_windows7
, 'Accept-Encoding': compression_supported
, 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close", 'SEC-CH-UA': "\"Chromium\";v=\"117\", \"Not;A=Brand\";v=\"24\"", 'SEC-CH-UA-FULL-VERSION': "117.0.5938.63"};
166 geturls_headers_chromium_windows7
.update(windows7_ua_addon
);
167 geturls_headers_palemoon_windows7
= {'Referer': "http://google.com/", 'User-Agent': geturls_ua_palemoon_windows7
, 'Accept-Encoding': compression_supported
, 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close"};
168 geturls_headers_opera_windows7
= {'Referer': "http://google.com/", 'User-Agent': geturls_ua_opera_windows7
, 'Accept-Encoding': compression_supported
, 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close", 'SEC-CH-UA': "\"Chromium\";v=\"116\", \"Not;A=Brand\";v=\"8\", \"Opera\";v=\"102\"", 'SEC-CH-UA-FULL-VERSION': "102.0.4880.56"};
169 geturls_headers_opera_windows7
.update(windows7_ua_addon
);
170 geturls_headers_vivaldi_windows7
= {'Referer': "http://google.com/", 'User-Agent': geturls_ua_vivaldi_windows7
, 'Accept-Encoding': compression_supported
, 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close", 'SEC-CH-UA': "\"Google Chrome\";v=\"117\", \"Not;A=Brand\";v=\"8\", \"Vivaldi\";v=\"6.2\"", 'SEC-CH-UA-FULL-VERSION': "6.2.3105.48"};
171 geturls_headers_vivaldi_windows7
.update(windows7_ua_addon
);
172 geturls_headers_internet_explorer_windows7
= {'Referer': "http://google.com/", 'User-Agent': geturls_ua_internet_explorer_windows7
, 'Accept-Encoding': compression_supported
, 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close"};
173 geturls_headers_microsoft_edge_windows7
= {'Referer': "http://google.com/", 'User-Agent': geturls_ua_microsoft_edge_windows7
, 'Accept-Encoding': compression_supported
, 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close", 'SEC-CH-UA': "\"Microsoft Edge\";v=\"117\", \"Not;A=Brand\";v=\"8\", \"Chromium\";v=\"117\"", 'SEC-CH-UA-FULL-VERSION': "117.0.2045.31"}
174 geturls_headers_microsoft_edge_windows7
.update(windows7_ua_addon
);
175 geturls_headers_pywwwget_python
= {'Referer': "http://google.com/", 'User-Agent': geturls_ua_pywwwget_python
, 'Accept-Encoding': "none", 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close", 'SEC-CH-UA': "\""+__project__
+"\";v=\""+str(__version__
)+"\", \"Not;A=Brand\";v=\"8\", \""+py_implementation
+"\";v=\""+str(platform
.release())+"\"", 'SEC-CH-UA-FULL-VERSION': str(__version__
), 'SEC-CH-UA-PLATFORM': ""+py_implementation
+"", 'SEC-CH-UA-ARCH': ""+platform
.machine()+"", 'SEC-CH-UA-PLATFORM': str(__version__
), 'SEC-CH-UA-BITNESS': str(PyBitness
)};
176 geturls_headers_pywwwget_python_alt
= {'Referer': "http://google.com/", 'User-Agent': geturls_ua_pywwwget_python_alt
, 'Accept-Encoding': "none", 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close", 'SEC-CH-UA': "\""+__project__
+"\";v=\""+str(__version__
)+"\", \"Not;A=Brand\";v=\"8\", \""+py_implementation
+"\";v=\""+str(platform
.release())+"\"", 'SEC-CH-UA-FULL-VERSION': str(__version__
), 'SEC-CH-UA-PLATFORM': ""+py_implementation
+"", 'SEC-CH-UA-ARCH': ""+platform
.machine()+"", 'SEC-CH-UA-PLATFORM': str(__version__
), 'SEC-CH-UA-BITNESS': str(PyBitness
)};
177 geturls_headers_googlebot_google
= {'Referer': "http://google.com/", 'User-Agent': geturls_ua_googlebot_google
, 'Accept-Encoding': "none", 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close"};
178 geturls_headers_googlebot_google_old
= {'Referer': "http://google.com/", 'User-Agent': geturls_ua_googlebot_google_old
, 'Accept-Encoding': "none", 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close"};
179 geturls_headers
= geturls_headers_firefox_windows7
;
180 geturls_download_sleep
= 0;
182 def verbose_printout(dbgtxt
, outtype
="log", dbgenable
=True, dgblevel
=20):
183 if(outtype
=="print" and dbgenable
):
186 elif(outtype
=="log" and dbgenable
):
187 logging
.info(dbgtxt
);
189 elif(outtype
=="warning" and dbgenable
):
190 logging
.warning(dbgtxt
);
192 elif(outtype
=="error" and dbgenable
):
193 logging
.error(dbgtxt
);
195 elif(outtype
=="critical" and dbgenable
):
196 logging
.critical(dbgtxt
);
198 elif(outtype
=="exception" and dbgenable
):
199 logging
.exception(dbgtxt
);
201 elif(outtype
=="logalt" and dbgenable
):
202 logging
.log(dgblevel
, dbgtxt
);
204 elif(outtype
=="debug" and dbgenable
):
205 logging
.debug(dbgtxt
);
213 def verbose_printout_return(dbgtxt
, outtype
="log", dbgenable
=True, dgblevel
=20):
214 dbgout
= verbose_printout(dbgtxt
, outtype
, dbgenable
, dgblevel
);
219 def add_url_param(url
, **params
):
221 parts
= list(urlparse
.urlsplit(url
));
222 d
= dict(cgi
.parse_qsl(parts
[n
])); # use cgi.parse_qs for list values
224 parts
[n
]=urlencode(d
);
225 return urlparse
.urlunsplit(parts
);
227 os
.environ
["PATH"] = os
.environ
["PATH"] + os
.pathsep
+ os
.path
.dirname(os
.path
.realpath(__file__
)) + os
.pathsep
+ os
.getcwd();
228 def which_exec(execfile):
229 for path
in os
.environ
["PATH"].split(":"):
230 if os
.path
.exists(path
+ "/" + execfile):
231 return path
+ "/" + execfile;
233 def listize(varlist
):
241 newlistreg
.update({ilx
: varlist
[il
]});
242 newlistrev
.update({varlist
[il
]: ilx
});
245 newlistfull
= {1: newlistreg
, 2: newlistrev
, 'reg': newlistreg
, 'rev': newlistrev
};
248 def twolistize(varlist
):
258 newlistnamereg
.update({ilx
: varlist
[il
][0].strip()});
259 newlistnamerev
.update({varlist
[il
][0].strip(): ilx
});
260 newlistdescreg
.update({ilx
: varlist
[il
][1].strip()});
261 newlistdescrev
.update({varlist
[il
][1].strip(): ilx
});
264 newlistnametmp
= {1: newlistnamereg
, 2: newlistnamerev
, 'reg': newlistnamereg
, 'rev': newlistnamerev
};
265 newlistdesctmp
= {1: newlistdescreg
, 2: newlistdescrev
, 'reg': newlistdescreg
, 'rev': newlistdescrev
};
266 newlistfull
= {1: newlistnametmp
, 2: newlistdesctmp
, 'name': newlistnametmp
, 'desc': newlistdesctmp
}
269 def arglistize(proexec
, *varlist
):
273 newarglist
= [proexec
];
275 if varlist
[il
][0] is not None:
276 newarglist
.append(varlist
[il
][0]);
277 if varlist
[il
][1] is not None:
278 newarglist
.append(varlist
[il
][1]);
282 # hms_string by ArcGIS Python Recipes
283 # https://arcpy.wordpress.com/2012/04/20/146/
284 def hms_string(sec_elapsed
):
285 h
= int(sec_elapsed
/ (60 * 60));
286 m
= int((sec_elapsed
% (60 * 60)) / 60);
287 s
= sec_elapsed
% 60.0;
288 return "{}:{:>02}:{:>05.2f}".format(h
, m
, s
);
290 # get_readable_size by Lipis
291 # http://stackoverflow.com/posts/14998888/revisions
292 def get_readable_size(bytes
, precision
=1, unit
="IEC"):
294 if(unit
!="IEC" and unit
!="SI"):
297 units
= [" B"," KiB"," MiB"," GiB"," TiB"," PiB"," EiB"," ZiB"];
298 unitswos
= ["B","KiB","MiB","GiB","TiB","PiB","EiB","ZiB"];
301 units
= [" B"," kB"," MB"," GB"," TB"," PB"," EB"," ZB"];
302 unitswos
= ["B","kB","MB","GB","TB","PB","EB","ZB"];
307 if abs(bytes
) < unitsize
:
308 strformat
= "%3."+str(precision
)+"f%s";
309 pre_return_val
= (strformat
% (bytes
, unit
));
310 pre_return_val
= re
.sub(r
"([0]+) ([A-Za-z]+)", r
" \2", pre_return_val
);
311 pre_return_val
= re
.sub(r
"\. ([A-Za-z]+)", r
" \1", pre_return_val
);
312 alt_return_val
= pre_return_val
.split();
313 return_val
= {'Bytes': orgbytes
, 'ReadableWithSuffix': pre_return_val
, 'ReadableWithoutSuffix': alt_return_val
[0], 'ReadableSuffix': alt_return_val
[1]}
316 strformat
= "%."+str(precision
)+"f%s";
317 pre_return_val
= (strformat
% (bytes
, "YiB"));
318 pre_return_val
= re
.sub(r
"([0]+) ([A-Za-z]+)", r
" \2", pre_return_val
);
319 pre_return_val
= re
.sub(r
"\. ([A-Za-z]+)", r
" \1", pre_return_val
);
320 alt_return_val
= pre_return_val
.split();
321 return_val
= {'Bytes': orgbytes
, 'ReadableWithSuffix': pre_return_val
, 'ReadableWithoutSuffix': alt_return_val
[0], 'ReadableSuffix': alt_return_val
[1]}
324 def get_readable_size_from_file(infile
, precision
=1, unit
="IEC", usehashes
=False, usehashtypes
="md5,sha1"):
326 usehashtypes
= usehashtypes
.lower();
327 getfilesize
= os
.path
.getsize(infile
);
328 return_val
= get_readable_size(getfilesize
, precision
, unit
);
330 hashtypelist
= usehashtypes
.split(",");
331 openfile
= open(infile
, "rb");
332 filecontents
= openfile
.read();
335 listnumend
= len(hashtypelist
);
336 while(listnumcount
< listnumend
):
337 hashtypelistlow
= hashtypelist
[listnumcount
].strip();
338 hashtypelistup
= hashtypelistlow
.upper();
339 filehash
= hashlib
.new(hashtypelistup
);
340 filehash
.update(filecontents
);
341 filegethash
= filehash
.hexdigest();
342 return_val
.update({hashtypelistup
: filegethash
});
346 def get_readable_size_from_string(instring
, precision
=1, unit
="IEC", usehashes
=False, usehashtypes
="md5,sha1"):
348 usehashtypes
= usehashtypes
.lower();
349 getfilesize
= len(instring
);
350 return_val
= get_readable_size(getfilesize
, precision
, unit
);
352 hashtypelist
= usehashtypes
.split(",");
354 listnumend
= len(hashtypelist
);
355 while(listnumcount
< listnumend
):
356 hashtypelistlow
= hashtypelist
[listnumcount
].strip();
357 hashtypelistup
= hashtypelistlow
.upper();
358 filehash
= hashlib
.new(hashtypelistup
);
359 if(sys
.version
[0]=="2"):
360 filehash
.update(instring
);
361 if(sys
.version
[0]>="3"):
362 filehash
.update(instring
.encode('utf-8'));
363 filegethash
= filehash
.hexdigest();
364 return_val
.update({hashtypelistup
: filegethash
});
368 def make_http_headers_from_dict_to_list(headers
={'Referer': "http://google.com/", 'User-Agent': geturls_ua
, 'Accept-Encoding': compression_supported
, 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close"}):
369 if isinstance(headers
, dict):
371 if(sys
.version
[0]=="2"):
372 for headkey
, headvalue
in headers
.iteritems():
373 returnval
.append((headkey
, headvalue
));
374 if(sys
.version
[0]>="3"):
375 for headkey
, headvalue
in headers
.items():
376 returnval
.append((headkey
, headvalue
));
377 elif isinstance(headers
, list):
383 def make_http_headers_from_dict_to_pycurl(headers
={'Referer': "http://google.com/", 'User-Agent': geturls_ua
, 'Accept-Encoding': compression_supported
, 'Accept-Language': "en-US,en;q=0.8,en-CA,en-GB;q=0.6", 'Accept-Charset': "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7", 'Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 'Connection': "close"}):
384 if isinstance(headers
, dict):
386 if(sys
.version
[0]=="2"):
387 for headkey
, headvalue
in headers
.iteritems():
388 returnval
.append(headkey
+": "+headvalue
);
389 if(sys
.version
[0]>="3"):
390 for headkey
, headvalue
in headers
.items():
391 returnval
.append(headkey
+": "+headvalue
);
392 elif isinstance(headers
, list):
398 def make_http_headers_from_list_to_dict(headers
=[("Referer", "http://google.com/"), ("User-Agent", geturls_ua
), ("Accept-Encoding", compression_supported
), ("Accept-Language", "en-US,en;q=0.8,en-CA,en-GB;q=0.6"), ("Accept-Charset", "ISO-8859-1,ISO-8859-15,utf-8;q=0.7,*;q=0.7"), ("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"), ("Connection", "close")]):
399 if isinstance(headers
, list):
404 returnval
.update({headers
[mli
][0]: headers
[mli
][1]});
406 elif isinstance(headers
, dict):
412 def get_httplib_support(checkvalue
=None):
413 global haverequests
, havemechanize
, havehttplib2
, haveurllib3
, havehttpx
, haveparamiko
;
415 returnval
.append("ftp");
416 returnval
.append("httplib");
418 returnval
.append("httplib2");
419 returnval
.append("urllib");
421 returnval
.append("urllib3");
422 returnval
.append("request3");
423 returnval
.append("request");
425 returnval
.append("requests");
427 returnval
.append("httpx");
428 returnval
.append("httpx2");
430 returnval
.append("mechanize");
432 returnval
.append("sftp");
433 if(not checkvalue
is None):
434 if(checkvalue
=="urllib1" or checkvalue
=="urllib2"):
435 checkvalue
= "urllib";
436 if(checkvalue
=="httplib1"):
437 checkvalue
= "httplib";
438 if(checkvalue
in returnval
):
444 def check_httplib_support(checkvalue
="urllib"):
445 if(checkvalue
=="urllib1" or checkvalue
=="urllib2"):
446 checkvalue
= "urllib";
447 if(checkvalue
=="httplib1"):
448 checkvalue
= "httplib";
449 returnval
= get_httplib_support(checkvalue
);
452 def get_httplib_support_list():
453 returnval
= get_httplib_support(None);
456 def download_from_url(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, httplibuse
="urllib", sleep
=-1):
457 global geturls_download_sleep
, haverequests
, havemechanize
, havehttplib2
, haveurllib3
, havehttpx
, haveparamiko
;
459 sleep
= geturls_download_sleep
;
460 if(httplibuse
=="urllib1" or httplibuse
=="urllib2"):
461 httplibuse
= "urllib";
462 if(httplibuse
=="httplib1"):
463 httplibuse
= "httplib";
464 if(not haverequests
and httplibuse
=="requests"):
465 httplibuse
= "urllib";
466 if(not havehttpx
and httplibuse
=="httpx"):
467 httplibuse
= "urllib";
468 if(not havehttpx
and httplibuse
=="httpx2"):
469 httplibuse
= "urllib";
470 if(not havemechanize
and httplibuse
=="mechanize"):
471 httplibuse
= "urllib";
472 if(not havehttplib2
and httplibuse
=="httplib2"):
473 httplibuse
= "httplib";
474 if(not haveparamiko
and httplibuse
=="sftp"):
476 if(httplibuse
=="urllib"):
477 returnval
= download_from_url_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
);
478 elif(httplibuse
=="request"):
479 returnval
= download_from_url_with_request(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
);
480 elif(httplibuse
=="request3"):
481 returnval
= download_from_url_with_request3(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
);
482 elif(httplibuse
=="httplib"):
483 returnval
= download_from_url_with_httplib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
);
484 elif(httplibuse
=="httplib2"):
485 returnval
= download_from_url_with_httplib2(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
);
486 elif(httplibuse
=="urllib3"):
487 returnval
= download_from_url_with_urllib3(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
);
488 elif(httplibuse
=="requests"):
489 returnval
= download_from_url_with_requests(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
);
490 elif(httplibuse
=="httpx"):
491 returnval
= download_from_url_with_httpx(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
);
492 elif(httplibuse
=="httpx2"):
493 returnval
= download_from_url_with_httpx2(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
);
494 elif(httplibuse
=="mechanize"):
495 returnval
= download_from_url_with_mechanize(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
);
496 elif(httplibuse
=="ftp"):
497 returnval
= download_from_url_with_ftp(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
);
498 elif(httplibuse
=="sftp"):
499 returnval
= download_from_url_with_sftp(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
);
504 def download_from_url_file(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, httplibuse
="urllib", buffersize
=524288, sleep
=-1):
505 global geturls_download_sleep
, haverequests
, havemechanize
, havehttplib2
, haveurllib3
, havehttpx
, haveparamiko
;
507 sleep
= geturls_download_sleep
;
508 if(httplibuse
=="urllib1" or httplibuse
=="urllib2"):
509 httplibuse
= "urllib";
510 if(httplibuse
=="httplib1"):
511 httplibuse
= "httplib";
512 if(not haverequests
and httplibuse
=="requests"):
513 httplibuse
= "urllib";
514 if(not havehttpx
and httplibuse
=="httpx"):
515 httplibuse
= "urllib";
516 if(not havehttpx
and httplibuse
=="httpx2"):
517 httplibuse
= "urllib";
518 if(not havemechanize
and httplibuse
=="mechanize"):
519 httplibuse
= "urllib";
520 if(not havehttplib2
and httplibuse
=="httplib2"):
521 httplibuse
= "httplib";
522 if(not haveparamiko
and httplibuse
=="sftp"):
524 if(httplibuse
=="urllib"):
525 returnval
= download_from_url_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
);
526 elif(httplibuse
=="request"):
527 returnval
= download_from_url_file_with_request(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
);
528 elif(httplibuse
=="request3"):
529 returnval
= download_from_url_file_with_request3(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
);
530 elif(httplibuse
=="httplib"):
531 returnval
= download_from_url_file_with_httplib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
);
532 elif(httplibuse
=="httplib2"):
533 returnval
= download_from_url_file_with_httplib2(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
);
534 elif(httplibuse
=="urllib3"):
535 returnval
= download_from_url_file_with_urllib3(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
);
536 elif(httplibuse
=="requests"):
537 returnval
= download_from_url_file_with_requests(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
);
538 elif(httplibuse
=="httpx"):
539 returnval
= download_from_url_file_with_httpx(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
);
540 elif(httplibuse
=="httpx2"):
541 returnval
= download_from_url_file_with_httpx2(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
);
542 elif(httplibuse
=="mechanize"):
543 returnval
= download_from_url_file_with_mechanize(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
);
544 elif(httplibuse
=="ftp"):
545 returnval
= download_from_url_file_with_ftp(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
);
546 elif(httplibuse
=="sftp"):
547 returnval
= download_from_url_file_with_sftp(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
);
552 def download_from_url_to_file(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, httplibuse
="urllib", outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
553 global geturls_download_sleep
, haverequests
, havemechanize
, havehttplib2
, haveurllib3
, havehttpx
, haveparamiko
;
555 sleep
= geturls_download_sleep
;
556 if(httplibuse
=="urllib1" or httplibuse
=="urllib2"):
557 httplibuse
= "urllib";
558 if(httplibuse
=="httplib1"):
559 httplibuse
= "httplib";
560 if(not haverequests
and httplibuse
=="requests"):
561 httplibuse
= "urllib";
562 if(not havehttpx
and httplibuse
=="httpx"):
563 httplibuse
= "urllib";
564 if(not havehttpx
and httplibuse
=="httpx2"):
565 httplibuse
= "urllib";
566 if(not havemechanize
and httplibuse
=="mechanize"):
567 httplibuse
= "urllib";
568 if(not havehttplib2
and httplibuse
=="httplib2"):
569 httplibuse
= "httplib";
570 if(not haveparamiko
and httplibuse
=="sftp"):
572 if(httplibuse
=="urllib"):
573 returnval
= download_from_url_to_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, outfile
, outpath
, buffersize
, sleep
);
574 elif(httplibuse
=="request"):
575 returnval
= download_from_url_to_file_with_request(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, outfile
, outpath
, buffersize
, sleep
);
576 elif(httplibuse
=="request3"):
577 returnval
= download_from_url_to_file_with_request3(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, outfile
, outpath
, buffersize
, sleep
);
578 elif(httplibuse
=="httplib"):
579 returnval
= download_from_url_to_file_with_httplib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, outfile
, outpath
, buffersize
, sleep
);
580 elif(httplibuse
=="httplib2"):
581 returnval
= download_from_url_to_file_with_httplib2(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, outfile
, outpath
, buffersize
, sleep
);
582 elif(httplibuse
=="urllib3"):
583 returnval
= download_from_url_to_file_with_urllib3(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, outfile
, outpath
, buffersize
, sleep
);
584 elif(httplibuse
=="requests"):
585 returnval
= download_from_url_to_file_with_requests(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, outfile
, outpath
, buffersize
, sleep
);
586 elif(httplibuse
=="httpx"):
587 returnval
= download_from_url_to_file_with_httpx(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, outfile
, outpath
, buffersize
, sleep
);
588 elif(httplibuse
=="httpx2"):
589 returnval
= download_from_url_to_file_with_httpx2(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, outfile
, outpath
, buffersize
, sleep
);
590 elif(httplibuse
=="mechanize"):
591 returnval
= download_from_url_to_file_with_mechanize(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, outfile
, outpath
, buffersize
, sleep
);
592 elif(httplibuse
=="ftp"):
593 returnval
= download_from_url_to_file_with_ftp(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, outfile
, outpath
, buffersize
, sleep
);
594 elif(httplibuse
=="sftp"):
595 returnval
= download_from_url_to_file_with_sftp(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, outfile
, outpath
, buffersize
, sleep
);
600 def download_from_url_with_urllib(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
601 global geturls_download_sleep
, havebrotli
;
603 sleep
= geturls_download_sleep
;
604 urlparts
= urlparse
.urlparse(httpurl
);
605 if(isinstance(httpheaders
, list)):
606 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
607 if(urlparts
.username
is not None or urlparts
.password
is not None):
608 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
609 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
610 geturls_opener
= build_opener(HTTPCookieProcessor(httpcookie
));
611 if(isinstance(httpheaders
, dict)):
612 httpheaders
= make_http_headers_from_dict_to_list(httpheaders
);
613 geturls_opener
.addheaders
= httpheaders
;
615 if(postdata
is not None and not isinstance(postdata
, dict)):
616 postdata
= urlencode(postdata
);
618 if(httpmethod
=="GET"):
619 geturls_text
= geturls_opener
.open(httpurl
);
620 elif(httpmethod
=="POST"):
621 geturls_text
= geturls_opener
.open(httpurl
, data
=postdata
);
623 geturls_text
= geturls_opener
.open(httpurl
);
624 except HTTPError
as geturls_text_error
:
625 geturls_text
= geturls_text_error
;
626 log
.info("Error With URL "+httpurl
);
628 log
.info("Error With URL "+httpurl
);
630 except socket
.timeout
:
631 log
.info("Error With URL "+httpurl
);
633 log
.info("Downloading URL "+httpurl
);
634 if(geturls_text
.info().get("Content-Encoding")=="gzip" or geturls_text
.info().get("Content-Encoding")=="deflate"):
635 if(sys
.version
[0]=="2"):
636 strbuf
= StringIO(geturls_text
.read());
637 if(sys
.version
[0]>="3"):
638 strbuf
= BytesIO(geturls_text
.read());
639 gzstrbuf
= gzip
.GzipFile(fileobj
=strbuf
);
640 returnval_content
= gzstrbuf
.read()[:];
641 if(geturls_text
.info().get("Content-Encoding")!="gzip" and geturls_text
.info().get("Content-Encoding")!="deflate"):
642 returnval_content
= geturls_text
.read()[:];
643 if(geturls_text
.info().get("Content-Encoding")=="br" and havebrotli
):
644 returnval_content
= brotli
.decompress(returnval_content
);
645 returnval
= {'Type': "Content", 'Content': returnval_content
, 'Headers': dict(geturls_text
.info()), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': make_http_headers_from_list_to_dict(httpheaders
), 'URL': geturls_text
.geturl(), 'Code': geturls_text
.getcode()};
646 geturls_text
.close();
649 def download_from_url_file_with_urllib(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
650 global geturls_download_sleep
, tmpfileprefix
, tmpfilesuffix
;
651 exec_time_start
= time
.time();
652 myhash
= hashlib
.new("sha1");
653 if(sys
.version
[0]=="2"):
654 myhash
.update(httpurl
);
655 myhash
.update(str(buffersize
));
656 myhash
.update(str(exec_time_start
));
657 if(sys
.version
[0]>="3"):
658 myhash
.update(httpurl
.encode('utf-8'));
659 myhash
.update(str(buffersize
).encode('utf-8'));
660 myhash
.update(str(exec_time_start
).encode('utf-8'));
661 newtmpfilesuffix
= tmpfilesuffix
+ str(myhash
.hexdigest());
663 sleep
= geturls_download_sleep
;
664 urlparts
= urlparse
.urlparse(httpurl
);
665 if(isinstance(httpheaders
, list)):
666 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
667 if(urlparts
.username
is not None or urlparts
.password
is not None):
668 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
669 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
670 geturls_opener
= build_opener(HTTPCookieProcessor(httpcookie
));
671 if(isinstance(httpheaders
, dict)):
672 httpheaders
= make_http_headers_from_dict_to_list(httpheaders
);
673 geturls_opener
.addheaders
= httpheaders
;
676 if(httpmethod
=="GET"):
677 geturls_text
= geturls_opener
.open(httpurl
);
678 elif(httpmethod
=="POST"):
679 geturls_text
= geturls_opener
.open(httpurl
, data
=postdata
);
681 geturls_text
= geturls_opener
.open(httpurl
);
682 except HTTPError
as geturls_text_error
:
683 geturls_text
= geturls_text_error
;
684 log
.info("Error With URL "+httpurl
);
686 log
.info("Error With URL "+httpurl
);
688 except socket
.timeout
:
689 log
.info("Error With URL "+httpurl
);
691 except socket
.timeout
:
692 log
.info("Error With URL "+httpurl
);
694 downloadsize
= geturls_text
.info().get('Content-Length');
695 if(downloadsize
is not None):
696 downloadsize
= int(downloadsize
);
697 if downloadsize
is None: downloadsize
= 0;
700 log
.info("Downloading URL "+httpurl
);
701 with tempfile
.NamedTemporaryFile('wb+', prefix
=tmpfileprefix
, suffix
=newtmpfilesuffix
, delete
=False) as f
:
702 tmpfilename
= f
.name
;
703 returnval
= {'Type': "File", 'Filename': tmpfilename
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'Headers': dict(geturls_text
.info()), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': make_http_headers_from_list_to_dict(httpheaders
), 'URL': geturls_text
.geturl(), 'Code': geturls_text
.getcode()};
705 databytes
= geturls_text
.read(buffersize
);
706 if not databytes
: break;
707 datasize
= len(databytes
);
708 fulldatasize
= datasize
+ fulldatasize
;
711 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
712 downloaddiff
= fulldatasize
- prevdownsize
;
713 log
.info("Downloading "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Downloaded "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
714 prevdownsize
= fulldatasize
;
717 geturls_text
.close();
718 exec_time_end
= time
.time();
719 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to download file.");
720 returnval
.update({'Filesize': os
.path
.getsize(tmpfilename
), 'DownloadTime': float(exec_time_start
- exec_time_end
), 'DownloadTimeReadable': hms_string(exec_time_start
- exec_time_end
)});
723 def download_from_url_to_file_with_urllib(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
724 global geturls_download_sleep
;
726 sleep
= geturls_download_sleep
;
727 if(not outfile
=="-"):
728 outpath
= outpath
.rstrip(os
.path
.sep
);
729 filepath
= os
.path
.realpath(outpath
+os
.path
.sep
+outfile
);
730 if(not os
.path
.exists(outpath
)):
731 os
.makedirs(outpath
);
732 if(os
.path
.exists(outpath
) and os
.path
.isfile(outpath
)):
734 if(os
.path
.exists(filepath
) and os
.path
.isdir(filepath
)):
736 pretmpfilename
= download_from_url_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
737 if(not pretmpfilename
):
739 tmpfilename
= pretmpfilename
['Filename'];
740 downloadsize
= os
.path
.getsize(tmpfilename
);
742 log
.info("Moving file "+tmpfilename
+" to "+filepath
);
743 exec_time_start
= time
.time();
744 shutil
.move(tmpfilename
, filepath
);
745 exec_time_end
= time
.time();
746 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to move file.");
747 if(os
.path
.exists(tmpfilename
)):
748 os
.remove(tmpfilename
);
749 returnval
= {'Type': "File", 'Filename': filepath
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
750 if(outfile
=="-" and sys
.version
[0]=="2"):
751 pretmpfilename
= download_from_url_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
752 if(not pretmpfilename
):
754 tmpfilename
= pretmpfilename
['Filename'];
755 downloadsize
= os
.path
.getsize(tmpfilename
);
758 exec_time_start
= time
.time();
759 with
open(tmpfilename
, 'rb') as ft
:
762 databytes
= ft
.read(buffersize
[1]);
763 if not databytes
: break;
764 datasize
= len(databytes
);
765 fulldatasize
= datasize
+ fulldatasize
;
768 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
769 downloaddiff
= fulldatasize
- prevdownsize
;
770 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
771 prevdownsize
= fulldatasize
;
774 fdata
= f
.getvalue();
777 os
.remove(tmpfilename
);
778 exec_time_end
= time
.time();
779 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
780 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
781 if(outfile
=="-" and sys
.version
[0]>="3"):
782 pretmpfilename
= download_from_url_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
783 tmpfilename
= pretmpfilename
['Filename'];
784 downloadsize
= os
.path
.getsize(tmpfilename
);
787 exec_time_start
= time
.time();
788 with
open(tmpfilename
, 'rb') as ft
:
791 databytes
= ft
.read(buffersize
[1]);
792 if not databytes
: break;
793 datasize
= len(databytes
);
794 fulldatasize
= datasize
+ fulldatasize
;
797 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
798 downloaddiff
= fulldatasize
- prevdownsize
;
799 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
800 prevdownsize
= fulldatasize
;
803 fdata
= f
.getvalue();
806 os
.remove(tmpfilename
);
807 exec_time_end
= time
.time();
808 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
809 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
812 def download_from_url_with_httplib(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
813 global geturls_download_sleep
, havebrotli
;
815 sleep
= geturls_download_sleep
;
816 urlparts
= urlparse
.urlparse(httpurl
);
817 if(isinstance(httpheaders
, list)):
818 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
819 if(urlparts
.username
is not None or urlparts
.password
is not None):
820 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
821 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
822 geturls_opener
= build_opener(HTTPCookieProcessor(httpcookie
));
823 geturls_opener
.addheaders
= httpheaders
;
825 if(urlparts
[0]=="http"):
826 httpconn
= HTTPConnection(urlparts
[1]);
827 elif(urlparts
[0]=="https"):
828 httpconn
= HTTPSConnection(urlparts
[1]);
831 if(postdata
is not None and not isinstance(postdata
, dict)):
832 postdata
= urlencode(postdata
);
834 if(httpmethod
=="GET"):
835 httpconn
.request("GET", urlparts
[2], headers
=httpheaders
);
836 elif(httpmethod
=="POST"):
837 httpconn
.request("GET", urlparts
[2], body
=postdata
, headers
=httpheaders
);
839 httpconn
.request("GET", urlparts
[2], headers
=httpheaders
);
840 except socket
.timeout
:
841 log
.info("Error With URL "+httpurl
);
843 except socket
.gaierror
:
844 log
.info("Error With URL "+httpurl
);
846 geturls_text
= httpconn
.getresponse();
847 log
.info("Downloading URL "+httpurl
);
848 if(dict(geturls_text
.getheaders()).get("Content-Encoding")=="gzip" or dict(geturls_text
.getheaders()).get("Content-Encoding")=="deflate"):
849 if(sys
.version
[0]=="2"):
850 strbuf
= StringIO(geturls_text
.read());
851 if(sys
.version
[0]>="3"):
852 strbuf
= BytesIO(geturls_text
.read());
853 gzstrbuf
= gzip
.GzipFile(fileobj
=strbuf
);
854 returnval_content
= gzstrbuf
.read()[:];
855 if(dict(geturls_text
.getheaders()).get("Content-Encoding")!="gzip" and dict(geturls_text
.getheaders()).get("Content-Encoding")!="deflate"):
856 returnval_content
= geturls_text
.read()[:];
857 if(dict(geturls_text
.getheaders()).get("Content-Encoding")=="br" and havebrotli
):
858 returnval_content
= brotli
.decompress(returnval_content
);
859 returnval
= {'Type': "Content", 'Content': returnval_content
, 'Headers': dict(geturls_text
.getheaders()), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': httpheaders
, 'URL': httpurl
, 'Code': geturls_text
.status
};
860 geturls_text
.close();
863 def download_from_url_file_with_httplib(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
864 global geturls_download_sleep
, tmpfileprefix
, tmpfilesuffix
;
865 exec_time_start
= time
.time();
866 myhash
= hashlib
.new("sha1");
867 if(sys
.version
[0]=="2"):
868 myhash
.update(httpurl
);
869 myhash
.update(str(buffersize
));
870 myhash
.update(str(exec_time_start
));
871 if(sys
.version
[0]>="3"):
872 myhash
.update(httpurl
.encode('utf-8'));
873 myhash
.update(str(buffersize
).encode('utf-8'));
874 myhash
.update(str(exec_time_start
).encode('utf-8'));
875 newtmpfilesuffix
= tmpfilesuffix
+ str(myhash
.hexdigest());
877 sleep
= geturls_download_sleep
;
878 urlparts
= urlparse
.urlparse(httpurl
);
879 if(isinstance(httpheaders
, list)):
880 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
881 if(urlparts
.username
is not None or urlparts
.password
is not None):
882 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
883 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
884 geturls_opener
= build_opener(HTTPCookieProcessor(httpcookie
));
885 geturls_opener
.addheaders
= httpheaders
;
887 if(urlparts
[0]=="http"):
888 httpconn
= HTTPConnection(urlparts
[1]);
889 elif(urlparts
[0]=="https"):
890 httpconn
= HTTPSConnection(urlparts
[1]);
893 if(postdata
is not None and not isinstance(postdata
, dict)):
894 postdata
= urlencode(postdata
);
896 if(httpmethod
=="GET"):
897 httpconn
.request("GET", urlparts
[2], headers
=httpheaders
);
898 elif(httpmethod
=="POST"):
899 httpconn
.request("GET", urlparts
[2], body
=postdata
, headers
=httpheaders
);
901 httpconn
.request("GET", urlparts
[2], headers
=httpheaders
);
902 except socket
.timeout
:
903 log
.info("Error With URL "+httpurl
);
905 except socket
.gaierror
:
906 log
.info("Error With URL "+httpurl
);
908 geturls_text
= httpconn
.getresponse();
909 downloadsize
= dict(geturls_text
.getheaders()).get('Content-Length');
910 if(downloadsize
is not None):
911 downloadsize
= int(downloadsize
);
912 if downloadsize
is None: downloadsize
= 0;
915 log
.info("Downloading URL "+httpurl
);
916 with tempfile
.NamedTemporaryFile('wb+', prefix
=tmpfileprefix
, suffix
=newtmpfilesuffix
, delete
=False) as f
:
917 tmpfilename
= f
.name
;
918 returnval
= {'Type': "File", 'Filename': tmpfilename
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'Headers': dict(dict(geturls_text
.getheaders())), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': httpheaders
, 'URL': httpurl
, 'Code': geturls_text
.status
};
920 databytes
= geturls_text
.read(buffersize
);
921 if not databytes
: break;
922 datasize
= len(databytes
);
923 fulldatasize
= datasize
+ fulldatasize
;
926 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
927 downloaddiff
= fulldatasize
- prevdownsize
;
928 log
.info("Downloading "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Downloaded "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
929 prevdownsize
= fulldatasize
;
932 geturls_text
.close();
933 exec_time_end
= time
.time();
934 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to download file.");
935 returnval
.update({'Filesize': os
.path
.getsize(tmpfilename
), 'DownloadTime': float(exec_time_start
- exec_time_end
), 'DownloadTimeReadable': hms_string(exec_time_start
- exec_time_end
)});
938 def download_from_url_to_file_with_httplib(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
939 global geturls_download_sleep
;
941 sleep
= geturls_download_sleep
;
942 if(not outfile
=="-"):
943 outpath
= outpath
.rstrip(os
.path
.sep
);
944 filepath
= os
.path
.realpath(outpath
+os
.path
.sep
+outfile
);
945 if(not os
.path
.exists(outpath
)):
946 os
.makedirs(outpath
);
947 if(os
.path
.exists(outpath
) and os
.path
.isfile(outpath
)):
949 if(os
.path
.exists(filepath
) and os
.path
.isdir(filepath
)):
951 pretmpfilename
= download_from_url_file_with_httplib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
952 if(not pretmpfilename
):
954 tmpfilename
= pretmpfilename
['Filename'];
955 downloadsize
= os
.path
.getsize(tmpfilename
);
957 log
.info("Moving file "+tmpfilename
+" to "+filepath
);
958 exec_time_start
= time
.time();
959 shutil
.move(tmpfilename
, filepath
);
960 exec_time_end
= time
.time();
961 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to move file.");
962 if(os
.path
.exists(tmpfilename
)):
963 os
.remove(tmpfilename
);
964 returnval
= {'Type': "File", 'Filename': filepath
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
965 if(outfile
=="-" and sys
.version
[0]=="2"):
966 pretmpfilename
= download_from_url_file_with_httplib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
967 if(not pretmpfilename
):
969 tmpfilename
= pretmpfilename
['Filename'];
970 downloadsize
= os
.path
.getsize(tmpfilename
);
973 exec_time_start
= time
.time();
974 with
open(tmpfilename
, 'rb') as ft
:
977 databytes
= ft
.read(buffersize
[1]);
978 if not databytes
: break;
979 datasize
= len(databytes
);
980 fulldatasize
= datasize
+ fulldatasize
;
983 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
984 downloaddiff
= fulldatasize
- prevdownsize
;
985 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
986 prevdownsize
= fulldatasize
;
989 fdata
= f
.getvalue();
992 os
.remove(tmpfilename
);
993 exec_time_end
= time
.time();
994 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
995 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
996 if(outfile
=="-" and sys
.version
[0]>="3"):
997 pretmpfilename
= download_from_url_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
998 tmpfilename
= pretmpfilename
['Filename'];
999 downloadsize
= os
.path
.getsize(tmpfilename
);
1002 exec_time_start
= time
.time();
1003 with
open(tmpfilename
, 'rb') as ft
:
1006 databytes
= ft
.read(buffersize
[1]);
1007 if not databytes
: break;
1008 datasize
= len(databytes
);
1009 fulldatasize
= datasize
+ fulldatasize
;
1012 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
1013 downloaddiff
= fulldatasize
- prevdownsize
;
1014 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
1015 prevdownsize
= fulldatasize
;
1018 fdata
= f
.getvalue();
1021 os
.remove(tmpfilename
);
1022 exec_time_end
= time
.time();
1023 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
1024 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
1028 def download_from_url_with_httplib2(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
1029 global geturls_download_sleep
, havebrotli
;
1031 sleep
= geturls_download_sleep
;
1032 urlparts
= urlparse
.urlparse(httpurl
);
1033 if(isinstance(httpheaders
, list)):
1034 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
1035 if(urlparts
.username
is not None or urlparts
.password
is not None):
1036 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
1037 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
1038 geturls_opener
= build_opener(HTTPCookieProcessor(httpcookie
));
1039 geturls_opener
.addheaders
= httpheaders
;
1041 if(urlparts
[0]=="http"):
1042 httpconn
= HTTPConnectionWithTimeout(urlparts
[1]);
1043 elif(urlparts
[0]=="https"):
1044 httpconn
= HTTPSConnectionWithTimeout(urlparts
[1]);
1047 if(postdata
is not None and not isinstance(postdata
, dict)):
1048 postdata
= urlencode(postdata
);
1050 if(httpmethod
=="GET"):
1051 httpconn
.request("GET", urlparts
[2], headers
=httpheaders
);
1052 elif(httpmethod
=="POST"):
1053 httpconn
.request("GET", urlparts
[2], body
=postdata
, headers
=httpheaders
);
1055 httpconn
.request("GET", urlparts
[2], headers
=httpheaders
);
1056 except socket
.timeout
:
1057 log
.info("Error With URL "+httpurl
);
1059 except socket
.gaierror
:
1060 log
.info("Error With URL "+httpurl
);
1062 geturls_text
= httpconn
.getresponse();
1063 log
.info("Downloading URL "+httpurl
);
1064 if(dict(geturls_text
.getheaders()).get("Content-Encoding")=="gzip" or dict(geturls_text
.getheaders()).get("Content-Encoding")=="deflate"):
1065 if(sys
.version
[0]=="2"):
1066 strbuf
= StringIO(geturls_text
.read());
1067 if(sys
.version
[0]>="3"):
1068 strbuf
= BytesIO(geturls_text
.read());
1069 gzstrbuf
= gzip
.GzipFile(fileobj
=strbuf
);
1070 returnval_content
= gzstrbuf
.read()[:];
1071 if(dict(geturls_text
.getheaders()).get("Content-Encoding")!="gzip" and dict(geturls_text
.getheaders()).get("Content-Encoding")!="deflate"):
1072 returnval_content
= geturls_text
.read()[:];
1073 if(dict(geturls_text
.getheaders()).get("Content-Encoding")=="br" and havebrotli
):
1074 returnval_content
= brotli
.decompress(returnval_content
);
1075 returnval
= {'Type': "Content", 'Content': returnval_content
, 'Headers': dict(geturls_text
.getheaders()), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': httpheaders
, 'URL': httpurl
, 'Code': geturls_text
.status
};
1076 geturls_text
.close();
1079 if(not havehttplib2
):
1080 def download_from_url_with_httplib2(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
1081 returnval
= download_from_url_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
)
1085 def download_from_url_file_with_httplib2(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
1086 global geturls_download_sleep
, tmpfileprefix
, tmpfilesuffix
;
1087 exec_time_start
= time
.time();
1088 myhash
= hashlib
.new("sha1");
1089 if(sys
.version
[0]=="2"):
1090 myhash
.update(httpurl
);
1091 myhash
.update(str(buffersize
));
1092 myhash
.update(str(exec_time_start
));
1093 if(sys
.version
[0]>="3"):
1094 myhash
.update(httpurl
.encode('utf-8'));
1095 myhash
.update(str(buffersize
).encode('utf-8'));
1096 myhash
.update(str(exec_time_start
).encode('utf-8'));
1097 newtmpfilesuffix
= tmpfilesuffix
+ str(myhash
.hexdigest());
1099 sleep
= geturls_download_sleep
;
1100 urlparts
= urlparse
.urlparse(httpurl
);
1101 if(isinstance(httpheaders
, list)):
1102 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
1103 if(urlparts
.username
is not None or urlparts
.password
is not None):
1104 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
1105 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
1106 geturls_opener
= build_opener(HTTPCookieProcessor(httpcookie
));
1107 geturls_opener
.addheaders
= httpheaders
;
1109 if(urlparts
[0]=="http"):
1110 httpconn
= HTTPConnectionWithTimeout(urlparts
[1]);
1111 elif(urlparts
[0]=="https"):
1112 httpconn
= HTTPSConnectionWithTimeout(urlparts
[1]);
1115 if(postdata
is not None and not isinstance(postdata
, dict)):
1116 postdata
= urlencode(postdata
);
1118 if(httpmethod
=="GET"):
1119 httpconn
.request("GET", urlparts
[2], headers
=httpheaders
);
1120 elif(httpmethod
=="POST"):
1121 httpconn
.request("GET", urlparts
[2], body
=postdata
, headers
=httpheaders
);
1123 httpconn
.request("GET", urlparts
[2], headers
=httpheaders
);
1124 except socket
.timeout
:
1125 log
.info("Error With URL "+httpurl
);
1127 except socket
.gaierror
:
1128 log
.info("Error With URL "+httpurl
);
1130 geturls_text
= httpconn
.getresponse();
1131 downloadsize
= dict(geturls_text
.getheaders()).get('Content-Length');
1132 if(downloadsize
is not None):
1133 downloadsize
= int(downloadsize
);
1134 if downloadsize
is None: downloadsize
= 0;
1137 log
.info("Downloading URL "+httpurl
);
1138 with tempfile
.NamedTemporaryFile('wb+', prefix
=tmpfileprefix
, suffix
=newtmpfilesuffix
, delete
=False) as f
:
1139 tmpfilename
= f
.name
;
1140 returnval
= {'Type': "File", 'Filename': tmpfilename
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'Headers': dict(dict(geturls_text
.getheaders())), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': httpheaders
, 'URL': httpurl
, 'Code': geturls_text
.status
};
1142 databytes
= geturls_text
.read(buffersize
);
1143 if not databytes
: break;
1144 datasize
= len(databytes
);
1145 fulldatasize
= datasize
+ fulldatasize
;
1148 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
1149 downloaddiff
= fulldatasize
- prevdownsize
;
1150 log
.info("Downloading "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Downloaded "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
1151 prevdownsize
= fulldatasize
;
1154 geturls_text
.close();
1155 exec_time_end
= time
.time();
1156 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to download file.");
1157 returnval
.update({'Filesize': os
.path
.getsize(tmpfilename
), 'DownloadTime': float(exec_time_start
- exec_time_end
), 'DownloadTimeReadable': hms_string(exec_time_start
- exec_time_end
)});
1160 if(not havehttplib2
):
1161 def download_from_url_file_with_httplib2(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
1162 returnval
= download_from_url_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
)
1166 def download_from_url_to_file_with_httplib2(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
1167 global geturls_download_sleep
;
1169 sleep
= geturls_download_sleep
;
1170 if(not outfile
=="-"):
1171 outpath
= outpath
.rstrip(os
.path
.sep
);
1172 filepath
= os
.path
.realpath(outpath
+os
.path
.sep
+outfile
);
1173 if(not os
.path
.exists(outpath
)):
1174 os
.makedirs(outpath
);
1175 if(os
.path
.exists(outpath
) and os
.path
.isfile(outpath
)):
1177 if(os
.path
.exists(filepath
) and os
.path
.isdir(filepath
)):
1179 pretmpfilename
= download_from_url_file_with_httplib2(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
1180 if(not pretmpfilename
):
1182 tmpfilename
= pretmpfilename
['Filename'];
1183 downloadsize
= os
.path
.getsize(tmpfilename
);
1185 log
.info("Moving file "+tmpfilename
+" to "+filepath
);
1186 exec_time_start
= time
.time();
1187 shutil
.move(tmpfilename
, filepath
);
1188 exec_time_end
= time
.time();
1189 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to move file.");
1190 if(os
.path
.exists(tmpfilename
)):
1191 os
.remove(tmpfilename
);
1192 returnval
= {'Type': "File", 'Filename': filepath
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
1193 if(outfile
=="-" and sys
.version
[0]=="2"):
1194 pretmpfilename
= download_from_url_file_with_httplib2(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
1195 if(not pretmpfilename
):
1197 tmpfilename
= pretmpfilename
['Filename'];
1198 downloadsize
= os
.path
.getsize(tmpfilename
);
1201 exec_time_start
= time
.time();
1202 with
open(tmpfilename
, 'rb') as ft
:
1205 databytes
= ft
.read(buffersize
[1]);
1206 if not databytes
: break;
1207 datasize
= len(databytes
);
1208 fulldatasize
= datasize
+ fulldatasize
;
1211 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
1212 downloaddiff
= fulldatasize
- prevdownsize
;
1213 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
1214 prevdownsize
= fulldatasize
;
1217 fdata
= f
.getvalue();
1220 os
.remove(tmpfilename
);
1221 exec_time_end
= time
.time();
1222 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
1223 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
1224 if(outfile
=="-" and sys
.version
[0]>="3"):
1225 pretmpfilename
= download_from_url_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
1226 tmpfilename
= pretmpfilename
['Filename'];
1227 downloadsize
= os
.path
.getsize(tmpfilename
);
1230 exec_time_start
= time
.time();
1231 with
open(tmpfilename
, 'rb') as ft
:
1234 databytes
= ft
.read(buffersize
[1]);
1235 if not databytes
: break;
1236 datasize
= len(databytes
);
1237 fulldatasize
= datasize
+ fulldatasize
;
1240 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
1241 downloaddiff
= fulldatasize
- prevdownsize
;
1242 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
1243 prevdownsize
= fulldatasize
;
1246 fdata
= f
.getvalue();
1249 os
.remove(tmpfilename
);
1250 exec_time_end
= time
.time();
1251 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
1252 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
1255 if(not havehttplib2
):
1256 def download_from_url_to_file_with_httplib2(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
1257 returnval
= download_from_url_to_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, outfile
, outpath
, sleep
)
1260 def download_from_url_with_request(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
1261 global geturls_download_sleep
, havebrotli
;
1263 sleep
= geturls_download_sleep
;
1264 urlparts
= urlparse
.urlparse(httpurl
);
1265 if(isinstance(httpheaders
, list)):
1266 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
1267 if(urlparts
.username
is not None or urlparts
.password
is not None):
1268 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
1269 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
1270 geturls_opener
= build_opener(HTTPCookieProcessor(httpcookie
));
1271 if(isinstance(httpheaders
, dict)):
1272 httpheaders
= make_http_headers_from_dict_to_list(httpheaders
);
1273 geturls_opener
.addheaders
= httpheaders
;
1274 urllib
.request
.install_opener(geturls_opener
);
1276 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
1277 if(postdata
is not None and not isinstance(postdata
, dict)):
1278 postdata
= urlencode(postdata
);
1280 if(httpmethod
=="GET"):
1281 geturls_request
= Request(httpurl
, headers
=httpheaders
);
1282 geturls_text
= urlopen(geturls_request
);
1283 elif(httpmethod
=="POST"):
1284 geturls_request
= Request(httpurl
, headers
=httpheaders
);
1285 geturls_text
= urlopen(geturls_request
, data
=postdata
);
1287 geturls_request
= Request(httpurl
, headers
=httpheaders
);
1288 geturls_text
= urlopen(geturls_request
);
1289 except HTTPError
as geturls_text_error
:
1290 geturls_text
= geturls_text_error
;
1291 log
.info("Error With URL "+httpurl
);
1293 log
.info("Error With URL "+httpurl
);
1295 except socket
.timeout
:
1296 log
.info("Error With URL "+httpurl
);
1298 log
.info("Downloading URL "+httpurl
);
1299 if(geturls_text
.headers
.get("Content-Encoding")=="gzip" or geturls_text
.headers
.get("Content-Encoding")=="deflate"):
1300 if(sys
.version
[0]=="2"):
1301 strbuf
= StringIO(geturls_text
.read());
1302 if(sys
.version
[0]>="3"):
1303 strbuf
= BytesIO(geturls_text
.read());
1304 gzstrbuf
= gzip
.GzipFile(fileobj
=strbuf
);
1305 returnval_content
= gzstrbuf
.read()[:];
1306 if(geturls_text
.headers
.get("Content-Encoding")!="gzip" and geturls_text
.headers
.get("Content-Encoding")!="deflate"):
1307 returnval_content
= geturls_text
.read()[:];
1308 if(geturls_text
.headers
.get("Content-Encoding")=="br" and havebrotli
):
1309 returnval_content
= brotli
.decompress(returnval_content
);
1310 returnval
= {'Type': "Content", 'Content': returnval_content
, 'Headers': dict(geturls_text
.headers
), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': make_http_headers_from_list_to_dict(httpheaders
), 'URL': geturls_text
.geturl(), 'Code': geturls_text
.getcode()};
1311 geturls_text
.close();
1314 def download_from_url_file_with_request(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
1315 global geturls_download_sleep
, tmpfileprefix
, tmpfilesuffix
;
1316 exec_time_start
= time
.time();
1317 myhash
= hashlib
.new("sha1");
1318 if(sys
.version
[0]=="2"):
1319 myhash
.update(httpurl
);
1320 myhash
.update(str(buffersize
));
1321 myhash
.update(str(exec_time_start
));
1322 if(sys
.version
[0]>="3"):
1323 myhash
.update(httpurl
.encode('utf-8'));
1324 myhash
.update(str(buffersize
).encode('utf-8'));
1325 myhash
.update(str(exec_time_start
).encode('utf-8'));
1326 newtmpfilesuffix
= tmpfilesuffix
+ str(myhash
.hexdigest());
1328 sleep
= geturls_download_sleep
;
1329 urlparts
= urlparse
.urlparse(httpurl
);
1330 if(isinstance(httpheaders
, list)):
1331 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
1332 if(urlparts
.username
is not None or urlparts
.password
is not None):
1333 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
1334 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
1335 geturls_opener
= build_opener(HTTPCookieProcessor(httpcookie
));
1336 if(isinstance(httpheaders
, dict)):
1337 httpheaders
= make_http_headers_from_dict_to_list(httpheaders
);
1338 geturls_opener
.addheaders
= httpheaders
;
1339 urllib
.request
.install_opener(geturls_opener
);
1341 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
1342 if(postdata
is not None and not isinstance(postdata
, dict)):
1343 postdata
= urlencode(postdata
);
1345 if(httpmethod
=="GET"):
1346 geturls_request
= Request(httpurl
, headers
=httpheaders
);
1347 geturls_text
= urlopen(geturls_request
);
1348 elif(httpmethod
=="POST"):
1349 geturls_request
= Request(httpurl
, headers
=httpheaders
);
1350 geturls_text
= urlopen(geturls_request
, data
=postdata
);
1352 geturls_request
= Request(httpurl
, headers
=httpheaders
);
1353 geturls_text
= urlopen(geturls_request
);
1354 except HTTPError
as geturls_text_error
:
1355 geturls_text
= geturls_text_error
;
1356 log
.info("Error With URL "+httpurl
);
1358 log
.info("Error With URL "+httpurl
);
1360 except socket
.timeout
:
1361 log
.info("Error With URL "+httpurl
);
1363 downloadsize
= geturls_text
.headers
.get('Content-Length');
1364 if(downloadsize
is not None):
1365 downloadsize
= int(downloadsize
);
1366 if downloadsize
is None: downloadsize
= 0;
1369 log
.info("Downloading URL "+httpurl
);
1370 with tempfile
.NamedTemporaryFile('wb+', prefix
=tmpfileprefix
, suffix
=newtmpfilesuffix
, delete
=False) as f
:
1371 tmpfilename
= f
.name
;
1372 returnval
= {'Type': "File", 'Filename': tmpfilename
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'Headers': dict(geturls_text
.headers
), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': make_http_headers_from_list_to_dict(httpheaders
), 'URL': geturls_text
.geturl(), 'Code': geturls_text
.getcode()};
1374 databytes
= geturls_text
.read(buffersize
);
1375 if not databytes
: break;
1376 datasize
= len(databytes
);
1377 fulldatasize
= datasize
+ fulldatasize
;
1380 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
1381 downloaddiff
= fulldatasize
- prevdownsize
;
1382 log
.info("Downloading "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Downloaded "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
1383 prevdownsize
= fulldatasize
;
1386 geturls_text
.close();
1387 exec_time_end
= time
.time();
1388 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to download file.");
1389 returnval
.update({'Filesize': os
.path
.getsize(tmpfilename
), 'DownloadTime': float(exec_time_start
- exec_time_end
), 'DownloadTimeReadable': hms_string(exec_time_start
- exec_time_end
)});
1392 def download_from_url_to_file_with_request(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
1393 global geturls_download_sleep
;
1395 sleep
= geturls_download_sleep
;
1396 if(not outfile
=="-"):
1397 outpath
= outpath
.rstrip(os
.path
.sep
);
1398 filepath
= os
.path
.realpath(outpath
+os
.path
.sep
+outfile
);
1399 if(not os
.path
.exists(outpath
)):
1400 os
.makedirs(outpath
);
1401 if(os
.path
.exists(outpath
) and os
.path
.isfile(outpath
)):
1403 if(os
.path
.exists(filepath
) and os
.path
.isdir(filepath
)):
1405 pretmpfilename
= download_from_url_file_with_request(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
1406 if(not pretmpfilename
):
1408 tmpfilename
= pretmpfilename
['Filename'];
1409 downloadsize
= os
.path
.getsize(tmpfilename
);
1411 log
.info("Moving file "+tmpfilename
+" to "+filepath
);
1412 exec_time_start
= time
.time();
1413 shutil
.move(tmpfilename
, filepath
);
1414 exec_time_end
= time
.time();
1415 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to move file.");
1416 if(os
.path
.exists(tmpfilename
)):
1417 os
.remove(tmpfilename
);
1418 returnval
= {'Type': "File", 'Filename': filepath
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent':pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
1419 if(outfile
=="-" and sys
.version
[0]=="2"):
1420 pretmpfilename
= download_from_url_file_with_request(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
1421 if(not pretmpfilename
):
1423 tmpfilename
= pretmpfilename
['Filename'];
1424 downloadsize
= os
.path
.getsize(tmpfilename
);
1427 exec_time_start
= time
.time();
1428 with
open(tmpfilename
, 'rb') as ft
:
1431 databytes
= ft
.read(buffersize
[1]);
1432 if not databytes
: break;
1433 datasize
= len(databytes
);
1434 fulldatasize
= datasize
+ fulldatasize
;
1437 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
1438 downloaddiff
= fulldatasize
- prevdownsize
;
1439 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
1440 prevdownsize
= fulldatasize
;
1443 fdata
= f
.getvalue();
1446 os
.remove(tmpfilename
);
1447 exec_time_end
= time
.time();
1448 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
1449 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
1450 if(outfile
=="-" and sys
.version
[0]>="3"):
1451 pretmpfilename
= download_from_url_file_with_request(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
1452 tmpfilename
= pretmpfilename
['Filename'];
1453 downloadsize
= os
.path
.getsize(tmpfilename
);
1456 exec_time_start
= time
.time();
1457 with
open(tmpfilename
, 'rb') as ft
:
1460 databytes
= ft
.read(buffersize
[1]);
1461 if not databytes
: break;
1462 datasize
= len(databytes
);
1463 fulldatasize
= datasize
+ fulldatasize
;
1466 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
1467 downloaddiff
= fulldatasize
- prevdownsize
;
1468 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
1469 prevdownsize
= fulldatasize
;
1472 fdata
= f
.getvalue();
1475 os
.remove(tmpfilename
);
1476 exec_time_end
= time
.time();
1477 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
1478 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
1482 def download_from_url_with_requests(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
1483 global geturls_download_sleep
, havebrotli
;
1485 sleep
= geturls_download_sleep
;
1486 urlparts
= urlparse
.urlparse(httpurl
);
1487 if(isinstance(httpheaders
, list)):
1488 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
1489 if(urlparts
.username
is not None or urlparts
.password
is not None):
1490 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
1491 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
1493 if(postdata
is not None and not isinstance(postdata
, dict)):
1494 postdata
= urlencode(postdata
);
1496 if(httpmethod
=="GET"):
1497 geturls_text
= requests
.get(httpurl
, headers
=httpheaders
, cookies
=httpcookie
);
1498 elif(httpmethod
=="POST"):
1499 geturls_text
= requests
.post(httpurl
, data
=postdata
, headers
=httpheaders
, cookies
=httpcookie
);
1501 geturls_text
= requests
.get(httpurl
, headers
=httpheaders
, cookies
=httpcookie
);
1502 except requests
.exceptions
.ConnectTimeout
:
1503 log
.info("Error With URL "+httpurl
);
1505 except requests
.exceptions
.ConnectError
:
1506 log
.info("Error With URL "+httpurl
);
1508 except socket
.timeout
:
1509 log
.info("Error With URL "+httpurl
);
1511 log
.info("Downloading URL "+httpurl
);
1512 if(geturls_text
.headers
.get('Content-Type')=="gzip" or geturls_text
.headers
.get('Content-Type')=="deflate"):
1513 if(sys
.version
[0]=="2"):
1514 strbuf
= StringIO(geturls_text
.content
);
1515 if(sys
.version
[0]>="3"):
1516 strbuf
= BytesIO(geturls_text
.content
);
1517 gzstrbuf
= gzip
.GzipFile(fileobj
=strbuf
);
1518 returnval_content
= gzstrbuf
.content
[:];
1519 if(geturls_text
.headers
.get('Content-Type')!="gzip" and geturls_text
.headers
.get('Content-Type')!="deflate"):
1520 returnval_content
= geturls_text
.content
[:];
1521 if(geturls_text
.headers
.get("Content-Encoding")=="br" and havebrotli
):
1522 returnval_content
= brotli
.decompress(returnval_content
);
1523 returnval
= {'Type': "Content", 'Content': returnval_content
, 'Headers': dict(geturls_text
.headers
), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': make_http_headers_from_list_to_dict(httpheaders
), 'URL': geturls_text
.url
, 'Code': geturls_text
.status_code
};
1524 geturls_text
.close();
1527 if(not haverequests
):
1528 def download_from_url_with_requests(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
1529 returnval
= download_from_url_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
)
1533 def download_from_url_file_with_requests(httpurl
, httpheaders
, httpcookie
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
1534 global geturls_download_sleep
, tmpfileprefix
, tmpfilesuffix
;
1535 exec_time_start
= time
.time();
1536 myhash
= hashlib
.new("sha1");
1537 if(sys
.version
[0]=="2"):
1538 myhash
.update(httpurl
);
1539 myhash
.update(str(buffersize
));
1540 myhash
.update(str(exec_time_start
));
1541 if(sys
.version
[0]>="3"):
1542 myhash
.update(httpurl
.encode('utf-8'));
1543 myhash
.update(str(buffersize
).encode('utf-8'));
1544 myhash
.update(str(exec_time_start
).encode('utf-8'));
1545 newtmpfilesuffix
= tmpfilesuffix
+ str(myhash
.hexdigest());
1547 sleep
= geturls_download_sleep
;
1548 urlparts
= urlparse
.urlparse(httpurl
);
1549 if(isinstance(httpheaders
, list)):
1550 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
1551 if(urlparts
.username
is not None or urlparts
.password
is not None):
1552 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
1553 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
1555 if(postdata
is not None and not isinstance(postdata
, dict)):
1556 postdata
= urlencode(postdata
);
1558 if(httpmethod
=="GET"):
1559 geturls_text
= requests
.get(httpurl
, headers
=httpheaders
, cookies
=httpcookie
);
1560 elif(httpmethod
=="POST"):
1561 geturls_text
= requests
.post(httpurl
, data
=postdata
, headers
=httpheaders
, cookies
=httpcookie
);
1563 geturls_text
= requests
.get(httpurl
, headers
=httpheaders
, cookies
=httpcookie
);
1564 except requests
.exceptions
.ConnectTimeout
:
1565 log
.info("Error With URL "+httpurl
);
1567 except requests
.exceptions
.ConnectError
:
1568 log
.info("Error With URL "+httpurl
);
1570 except socket
.timeout
:
1571 log
.info("Error With URL "+httpurl
);
1573 downloadsize
= int(geturls_text
.headers
.get('Content-Length'));
1574 if(downloadsize
is not None):
1575 downloadsize
= int(downloadsize
);
1576 if downloadsize
is None: downloadsize
= 0;
1579 log
.info("Downloading URL "+httpurl
);
1580 with tempfile
.NamedTemporaryFile('wb+', prefix
=tmpfileprefix
, suffix
=newtmpfilesuffix
, delete
=False) as f
:
1581 tmpfilename
= f
.name
;
1582 returnval
= {'Type': "File", 'Filename': tmpfilename
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'Headers': dict(geturls_text
.headers
), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': make_http_headers_from_list_to_dict(httpheaders
), 'URL': geturls_text
.url
, 'Code': geturls_text
.status_code
};
1583 for databytes
in geturls_text
.iter_content(chunk_size
=buffersize
):
1584 datasize
= len(databytes
);
1585 fulldatasize
= datasize
+ fulldatasize
;
1588 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
1589 downloaddiff
= fulldatasize
- prevdownsize
;
1590 log
.info("Downloading "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Downloaded "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
1591 prevdownsize
= fulldatasize
;
1594 geturls_text
.close();
1595 exec_time_end
= time
.time();
1596 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to download file.");
1597 returnval
.update({'Filesize': os
.path
.getsize(tmpfilename
), 'DownloadTime': float(exec_time_start
- exec_time_end
), 'DownloadTimeReadable': hms_string(exec_time_start
- exec_time_end
)});
1600 if(not haverequests
):
1601 def download_from_url_file_with_requests(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
1602 returnval
= download_from_url_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
)
1606 def download_from_url_to_file_with_requests(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
1607 global geturls_download_sleep
;
1609 sleep
= geturls_download_sleep
;
1610 if(not outfile
=="-"):
1611 outpath
= outpath
.rstrip(os
.path
.sep
);
1612 filepath
= os
.path
.realpath(outpath
+os
.path
.sep
+outfile
);
1613 if(not os
.path
.exists(outpath
)):
1614 os
.makedirs(outpath
);
1615 if(os
.path
.exists(outpath
) and os
.path
.isfile(outpath
)):
1617 if(os
.path
.exists(filepath
) and os
.path
.isdir(filepath
)):
1619 pretmpfilename
= download_from_url_file_with_requests(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
1620 if(not pretmpfilename
):
1622 tmpfilename
= pretmpfilename
['Filename'];
1623 downloadsize
= os
.path
.getsize(tmpfilename
);
1625 log
.info("Moving file "+tmpfilename
+" to "+filepath
);
1626 exec_time_start
= time
.time();
1627 shutil
.move(tmpfilename
, filepath
);
1628 exec_time_end
= time
.time();
1629 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to move file.");
1630 if(os
.path
.exists(tmpfilename
)):
1631 os
.remove(tmpfilename
);
1632 returnval
= {'Type': "File", 'Filename': filepath
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
1633 if(outfile
=="-" and sys
.version
[0]=="2"):
1634 pretmpfilename
= download_from_url_file_with_requests(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
1635 if(not pretmpfilename
):
1637 tmpfilename
= pretmpfilename
['Filename'];
1638 downloadsize
= os
.path
.getsize(tmpfilename
);
1641 exec_time_start
= time
.time();
1642 with
open(tmpfilename
, 'rb') as ft
:
1645 databytes
= ft
.read(buffersize
[1]);
1646 if not databytes
: break;
1647 datasize
= len(databytes
);
1648 fulldatasize
= datasize
+ fulldatasize
;
1651 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
1652 downloaddiff
= fulldatasize
- prevdownsize
;
1653 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
1654 prevdownsize
= fulldatasize
;
1657 fdata
= f
.getvalue();
1660 os
.remove(tmpfilename
);
1661 exec_time_end
= time
.time();
1662 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
1663 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': ['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
1664 if(outfile
=="-" and sys
.version
[0]>="3"):
1665 pretmpfilename
= download_from_url_file_with_requests(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
1666 tmpfilename
= pretmpfilename
['Filename'];
1667 downloadsize
= os
.path
.getsize(tmpfilename
);
1670 exec_time_start
= time
.time();
1671 with
open(tmpfilename
, 'rb') as ft
:
1674 databytes
= ft
.read(buffersize
[1]);
1675 if not databytes
: break;
1676 datasize
= len(databytes
);
1677 fulldatasize
= datasize
+ fulldatasize
;
1680 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
1681 downloaddiff
= fulldatasize
- prevdownsize
;
1682 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
1683 prevdownsize
= fulldatasize
;
1686 fdata
= f
.getvalue();
1689 os
.remove(tmpfilename
);
1690 exec_time_end
= time
.time();
1691 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
1692 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
1695 if(not haverequests
):
1696 def download_from_url_to_file_with_requests(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
1697 returnval
= download_from_url_to_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, outfile
, outpath
, sleep
)
1701 def download_from_url_with_httpx(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
1702 global geturls_download_sleep
, havebrotli
;
1704 sleep
= geturls_download_sleep
;
1705 urlparts
= urlparse
.urlparse(httpurl
);
1706 if(isinstance(httpheaders
, list)):
1707 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
1708 if(urlparts
.username
is not None or urlparts
.password
is not None):
1709 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
1710 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
1712 if(postdata
is not None and not isinstance(postdata
, dict)):
1713 postdata
= urlencode(postdata
);
1715 if(httpmethod
=="GET"):
1716 httpx_pool
= httpx
.Client(http1
=True, http2
=False, trust_env
=True);
1717 geturls_text
= httpx_pool
.get(httpurl
, headers
=httpheaders
, cookies
=httpcookie
);
1718 elif(httpmethod
=="POST"):
1719 httpx_pool
= httpx
.Client(http1
=True, http2
=False, trust_env
=True);
1720 geturls_text
= httpx_pool
.post(httpurl
, data
=postdata
, headers
=httpheaders
, cookies
=httpcookie
);
1722 httpx_pool
= httpx
.Client(http1
=True, http2
=False, trust_env
=True);
1723 geturls_text
= httpx_pool
.get(httpurl
, headers
=httpheaders
, cookies
=httpcookie
);
1724 except httpx
.ConnectTimeout
:
1725 log
.info("Error With URL "+httpurl
);
1727 except httpx
.ConnectError
:
1728 log
.info("Error With URL "+httpurl
);
1730 except socket
.timeout
:
1731 log
.info("Error With URL "+httpurl
);
1733 log
.info("Downloading URL "+httpurl
);
1734 if(geturls_text
.headers
.get('Content-Type')=="gzip" or geturls_text
.headers
.get('Content-Type')=="deflate"):
1735 if(sys
.version
[0]=="2"):
1736 strbuf
= StringIO(geturls_text
.content
);
1737 if(sys
.version
[0]>="3"):
1738 strbuf
= BytesIO(geturls_text
.content
);
1739 gzstrbuf
= gzip
.GzipFile(fileobj
=strbuf
);
1740 returnval_content
= gzstrbuf
.content
[:];
1741 if(geturls_text
.headers
.get('Content-Type')!="gzip" and geturls_text
.headers
.get('Content-Type')!="deflate"):
1742 returnval_content
= geturls_text
.content
[:];
1743 if(geturls_text
.headers
.get("Content-Encoding")=="br" and havebrotli
):
1744 returnval_content
= brotli
.decompress(returnval_content
);
1745 returnval
= {'Type': "Content", 'Content': returnval_content
, 'Headers': dict(geturls_text
.headers
), 'Version': geturls_text
.http_version
, 'Method': httpmethod
, 'HeadersSent': make_http_headers_from_list_to_dict(httpheaders
), 'URL': str(geturls_text
.url
), 'Code': geturls_text
.status_code
};
1746 geturls_text
.close();
1750 def download_from_url_with_httpx(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
1751 returnval
= download_from_url_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
)
1755 def download_from_url_file_with_httpx(httpurl
, httpheaders
, httpcookie
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
1756 global geturls_download_sleep
, tmpfileprefix
, tmpfilesuffix
;
1757 exec_time_start
= time
.time();
1758 myhash
= hashlib
.new("sha1");
1759 if(sys
.version
[0]=="2"):
1760 myhash
.update(httpurl
);
1761 myhash
.update(str(buffersize
));
1762 myhash
.update(str(exec_time_start
));
1763 if(sys
.version
[0]>="3"):
1764 myhash
.update(httpurl
.encode('utf-8'));
1765 myhash
.update(str(buffersize
).encode('utf-8'));
1766 myhash
.update(str(exec_time_start
).encode('utf-8'));
1767 newtmpfilesuffix
= tmpfilesuffix
+ str(myhash
.hexdigest());
1769 sleep
= geturls_download_sleep
;
1770 urlparts
= urlparse
.urlparse(httpurl
);
1771 if(isinstance(httpheaders
, list)):
1772 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
1773 if(urlparts
.username
is not None or urlparts
.password
is not None):
1774 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
1775 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
1777 if(postdata
is not None and not isinstance(postdata
, dict)):
1778 postdata
= urlencode(postdata
);
1780 if(httpmethod
=="GET"):
1781 httpx_pool
= httpx
.Client(http1
=True, http2
=False, trust_env
=True);
1782 geturls_text
= httpx_pool
.get(httpurl
, headers
=httpheaders
, cookies
=httpcookie
);
1783 elif(httpmethod
=="POST"):
1784 httpx_pool
= httpx
.Client(http1
=True, http2
=False, trust_env
=True);
1785 geturls_text
= httpx_pool
.post(httpurl
, data
=postdata
, headers
=httpheaders
, cookies
=httpcookie
);
1787 httpx_pool
= httpx
.Client(http1
=True, http2
=False, trust_env
=True);
1788 geturls_text
= httpx_pool
.get(httpurl
, headers
=httpheaders
, cookies
=httpcookie
);
1789 except httpx
.ConnectTimeout
:
1790 log
.info("Error With URL "+httpurl
);
1792 except httpx
.ConnectError
:
1793 log
.info("Error With URL "+httpurl
);
1795 except socket
.timeout
:
1796 log
.info("Error With URL "+httpurl
);
1798 downloadsize
= int(geturls_text
.headers
.get('Content-Length'));
1799 if(downloadsize
is not None):
1800 downloadsize
= int(downloadsize
);
1801 if downloadsize
is None: downloadsize
= 0;
1804 log
.info("Downloading URL "+httpurl
);
1805 with tempfile
.NamedTemporaryFile('wb+', prefix
=tmpfileprefix
, suffix
=newtmpfilesuffix
, delete
=False) as f
:
1806 tmpfilename
= f
.name
;
1807 returnval
= {'Type': "File", 'Filename': tmpfilename
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'Headers': dict(geturls_text
.headers
), 'Version': geturls_text
.http_version
, 'Method': httpmethod
, 'HeadersSent': make_http_headers_from_list_to_dict(httpheaders
), 'URL': str(geturls_text
.url
), 'Code': geturls_text
.status_code
};
1808 for databytes
in geturls_text
.iter_content(chunk_size
=buffersize
):
1809 datasize
= len(databytes
);
1810 fulldatasize
= datasize
+ fulldatasize
;
1813 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
1814 downloaddiff
= fulldatasize
- prevdownsize
;
1815 log
.info("Downloading "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Downloaded "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
1816 prevdownsize
= fulldatasize
;
1819 geturls_text
.close();
1820 exec_time_end
= time
.time();
1821 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to download file.");
1822 returnval
.update({'Filesize': os
.path
.getsize(tmpfilename
), 'DownloadTime': float(exec_time_start
- exec_time_end
), 'DownloadTimeReadable': hms_string(exec_time_start
- exec_time_end
)});
1826 def download_from_url_file_with_httpx(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
1827 returnval
= download_from_url_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
)
1831 def download_from_url_to_file_with_httpx(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
1832 global geturls_download_sleep
;
1834 sleep
= geturls_download_sleep
;
1835 if(not outfile
=="-"):
1836 outpath
= outpath
.rstrip(os
.path
.sep
);
1837 filepath
= os
.path
.realpath(outpath
+os
.path
.sep
+outfile
);
1838 if(not os
.path
.exists(outpath
)):
1839 os
.makedirs(outpath
);
1840 if(os
.path
.exists(outpath
) and os
.path
.isfile(outpath
)):
1842 if(os
.path
.exists(filepath
) and os
.path
.isdir(filepath
)):
1844 pretmpfilename
= download_from_url_file_with_httpx(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
1845 if(not pretmpfilename
):
1847 tmpfilename
= pretmpfilename
['Filename'];
1848 downloadsize
= os
.path
.getsize(tmpfilename
);
1850 log
.info("Moving file "+tmpfilename
+" to "+filepath
);
1851 exec_time_start
= time
.time();
1852 shutil
.move(tmpfilename
, filepath
);
1853 exec_time_end
= time
.time();
1854 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to move file.");
1855 if(os
.path
.exists(tmpfilename
)):
1856 os
.remove(tmpfilename
);
1857 returnval
= {'Type': "File", 'Filename': filepath
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
1858 if(outfile
=="-" and sys
.version
[0]=="2"):
1859 pretmpfilename
= download_from_url_file_with_httpx(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
1860 if(not pretmpfilename
):
1862 tmpfilename
= pretmpfilename
['Filename'];
1863 downloadsize
= os
.path
.getsize(tmpfilename
);
1866 exec_time_start
= time
.time();
1867 with
open(tmpfilename
, 'rb') as ft
:
1870 databytes
= ft
.read(buffersize
[1]);
1871 if not databytes
: break;
1872 datasize
= len(databytes
);
1873 fulldatasize
= datasize
+ fulldatasize
;
1876 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
1877 downloaddiff
= fulldatasize
- prevdownsize
;
1878 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
1879 prevdownsize
= fulldatasize
;
1882 fdata
= f
.getvalue();
1885 os
.remove(tmpfilename
);
1886 exec_time_end
= time
.time();
1887 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
1888 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': ['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
1889 if(outfile
=="-" and sys
.version
[0]>="3"):
1890 pretmpfilename
= download_from_url_file_with_httpx(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
1891 tmpfilename
= pretmpfilename
['Filename'];
1892 downloadsize
= os
.path
.getsize(tmpfilename
);
1895 exec_time_start
= time
.time();
1896 with
open(tmpfilename
, 'rb') as ft
:
1899 databytes
= ft
.read(buffersize
[1]);
1900 if not databytes
: break;
1901 datasize
= len(databytes
);
1902 fulldatasize
= datasize
+ fulldatasize
;
1905 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
1906 downloaddiff
= fulldatasize
- prevdownsize
;
1907 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
1908 prevdownsize
= fulldatasize
;
1911 fdata
= f
.getvalue();
1914 os
.remove(tmpfilename
);
1915 exec_time_end
= time
.time();
1916 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
1917 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
1921 def download_from_url_to_file_with_httpx(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
1922 returnval
= download_from_url_to_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, outfile
, outpath
, sleep
)
1926 def download_from_url_with_httpx2(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
1927 global geturls_download_sleep
, havebrotli
;
1929 sleep
= geturls_download_sleep
;
1930 urlparts
= urlparse
.urlparse(httpurl
);
1931 if(isinstance(httpheaders
, list)):
1932 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
1933 if(urlparts
.username
is not None or urlparts
.password
is not None):
1934 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
1935 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
1937 if(postdata
is not None and not isinstance(postdata
, dict)):
1938 postdata
= urlencode(postdata
);
1940 if(httpmethod
=="GET"):
1941 httpx_pool
= httpx
.Client(http1
=True, http2
=True, trust_env
=True);
1942 geturls_text
= httpx_pool
.get(httpurl
, headers
=httpheaders
, cookies
=httpcookie
);
1943 elif(httpmethod
=="POST"):
1944 httpx_pool
= httpx
.Client(http1
=True, http2
=True, trust_env
=True);
1945 geturls_text
= httpx_pool
.post(httpurl
, data
=postdata
, headers
=httpheaders
, cookies
=httpcookie
);
1947 httpx_pool
= httpx
.Client(http1
=True, http2
=True, trust_env
=True);
1948 geturls_text
= httpx_pool
.get(httpurl
, headers
=httpheaders
, cookies
=httpcookie
);
1949 except httpx
.ConnectTimeout
:
1950 log
.info("Error With URL "+httpurl
);
1952 except httpx
.ConnectError
:
1953 log
.info("Error With URL "+httpurl
);
1955 except socket
.timeout
:
1956 log
.info("Error With URL "+httpurl
);
1958 log
.info("Downloading URL "+httpurl
);
1959 if(geturls_text
.headers
.get('Content-Type')=="gzip" or geturls_text
.headers
.get('Content-Type')=="deflate"):
1960 if(sys
.version
[0]=="2"):
1961 strbuf
= StringIO(geturls_text
.content
);
1962 if(sys
.version
[0]>="3"):
1963 strbuf
= BytesIO(geturls_text
.content
);
1964 gzstrbuf
= gzip
.GzipFile(fileobj
=strbuf
);
1965 returnval_content
= gzstrbuf
.content
[:];
1966 if(geturls_text
.headers
.get('Content-Type')!="gzip" and geturls_text
.headers
.get('Content-Type')!="deflate"):
1967 returnval_content
= geturls_text
.content
[:];
1968 if(geturls_text
.headers
.get("Content-Encoding")=="br" and havebrotli
):
1969 returnval_content
= brotli
.decompress(returnval_content
);
1970 returnval
= {'Type': "Content", 'Content': returnval_content
, 'Headers': dict(geturls_text
.headers
), 'Version': geturls_text
.http_version
, 'Method': httpmethod
, 'HeadersSent': make_http_headers_from_list_to_dict(httpheaders
), 'URL': str(geturls_text
.url
), 'Code': geturls_text
.status_code
};
1971 geturls_text
.close();
1975 def download_from_url_with_httpx2(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
1976 returnval
= download_from_url_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
)
1980 def download_from_url_file_with_httpx2(httpurl
, httpheaders
, httpcookie
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
1981 global geturls_download_sleep
, tmpfileprefix
, tmpfilesuffix
;
1982 exec_time_start
= time
.time();
1983 myhash
= hashlib
.new("sha1");
1984 if(sys
.version
[0]=="2"):
1985 myhash
.update(httpurl
);
1986 myhash
.update(str(buffersize
));
1987 myhash
.update(str(exec_time_start
));
1988 if(sys
.version
[0]>="3"):
1989 myhash
.update(httpurl
.encode('utf-8'));
1990 myhash
.update(str(buffersize
).encode('utf-8'));
1991 myhash
.update(str(exec_time_start
).encode('utf-8'));
1992 newtmpfilesuffix
= tmpfilesuffix
+ str(myhash
.hexdigest());
1994 sleep
= geturls_download_sleep
;
1995 urlparts
= urlparse
.urlparse(httpurl
);
1996 if(isinstance(httpheaders
, list)):
1997 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
1998 if(urlparts
.username
is not None or urlparts
.password
is not None):
1999 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
2000 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
2002 if(postdata
is not None and not isinstance(postdata
, dict)):
2003 postdata
= urlencode(postdata
);
2005 if(httpmethod
=="GET"):
2006 httpx_pool
= httpx
.Client(http1
=True, http2
=True, trust_env
=True);
2007 geturls_text
= httpx_pool
.get(httpurl
, headers
=httpheaders
, cookies
=httpcookie
);
2008 elif(httpmethod
=="POST"):
2009 httpx_pool
= httpx
.Client(http1
=True, http2
=True, trust_env
=True);
2010 geturls_text
= httpx_pool
.post(httpurl
, data
=postdata
, headers
=httpheaders
, cookies
=httpcookie
);
2012 httpx_pool
= httpx
.Client(http1
=True, http2
=True, trust_env
=True);
2013 geturls_text
= httpx_pool
.get(httpurl
, headers
=httpheaders
, cookies
=httpcookie
);
2014 except httpx
.ConnectTimeout
:
2015 log
.info("Error With URL "+httpurl
);
2017 except httpx
.ConnectError
:
2018 log
.info("Error With URL "+httpurl
);
2020 except socket
.timeout
:
2021 log
.info("Error With URL "+httpurl
);
2023 downloadsize
= int(geturls_text
.headers
.get('Content-Length'));
2024 if(downloadsize
is not None):
2025 downloadsize
= int(downloadsize
);
2026 if downloadsize
is None: downloadsize
= 0;
2029 log
.info("Downloading URL "+httpurl
);
2030 with tempfile
.NamedTemporaryFile('wb+', prefix
=tmpfileprefix
, suffix
=newtmpfilesuffix
, delete
=False) as f
:
2031 tmpfilename
= f
.name
;
2032 returnval
= {'Type': "File", 'Filename': tmpfilename
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'Headers': dict(geturls_text
.headers
), 'Version': geturls_text
.http_version
, 'Method': httpmethod
, 'HeadersSent': make_http_headers_from_list_to_dict(httpheaders
), 'URL': str(geturls_text
.url
), 'Code': geturls_text
.status_code
};
2033 for databytes
in geturls_text
.iter_content(chunk_size
=buffersize
):
2034 datasize
= len(databytes
);
2035 fulldatasize
= datasize
+ fulldatasize
;
2038 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
2039 downloaddiff
= fulldatasize
- prevdownsize
;
2040 log
.info("Downloading "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Downloaded "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
2041 prevdownsize
= fulldatasize
;
2044 geturls_text
.close();
2045 exec_time_end
= time
.time();
2046 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to download file.");
2047 returnval
.update({'Filesize': os
.path
.getsize(tmpfilename
), 'DownloadTime': float(exec_time_start
- exec_time_end
), 'DownloadTimeReadable': hms_string(exec_time_start
- exec_time_end
)});
2051 def download_from_url_file_with_httpx2(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
2052 returnval
= download_from_url_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
)
2056 def download_from_url_to_file_with_httpx2(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
2057 global geturls_download_sleep
;
2059 sleep
= geturls_download_sleep
;
2060 if(not outfile
=="-"):
2061 outpath
= outpath
.rstrip(os
.path
.sep
);
2062 filepath
= os
.path
.realpath(outpath
+os
.path
.sep
+outfile
);
2063 if(not os
.path
.exists(outpath
)):
2064 os
.makedirs(outpath
);
2065 if(os
.path
.exists(outpath
) and os
.path
.isfile(outpath
)):
2067 if(os
.path
.exists(filepath
) and os
.path
.isdir(filepath
)):
2069 pretmpfilename
= download_from_url_file_with_httpx2(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
2070 if(not pretmpfilename
):
2072 tmpfilename
= pretmpfilename
['Filename'];
2073 downloadsize
= os
.path
.getsize(tmpfilename
);
2075 log
.info("Moving file "+tmpfilename
+" to "+filepath
);
2076 exec_time_start
= time
.time();
2077 shutil
.move(tmpfilename
, filepath
);
2078 exec_time_end
= time
.time();
2079 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to move file.");
2080 if(os
.path
.exists(tmpfilename
)):
2081 os
.remove(tmpfilename
);
2082 returnval
= {'Type': "File", 'Filename': filepath
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
2083 if(outfile
=="-" and sys
.version
[0]=="2"):
2084 pretmpfilename
= download_from_url_file_with_httpx2(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
2085 if(not pretmpfilename
):
2087 tmpfilename
= pretmpfilename
['Filename'];
2088 downloadsize
= os
.path
.getsize(tmpfilename
);
2091 exec_time_start
= time
.time();
2092 with
open(tmpfilename
, 'rb') as ft
:
2095 databytes
= ft
.read(buffersize
[1]);
2096 if not databytes
: break;
2097 datasize
= len(databytes
);
2098 fulldatasize
= datasize
+ fulldatasize
;
2101 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
2102 downloaddiff
= fulldatasize
- prevdownsize
;
2103 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
2104 prevdownsize
= fulldatasize
;
2107 fdata
= f
.getvalue();
2110 os
.remove(tmpfilename
);
2111 exec_time_end
= time
.time();
2112 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
2113 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': ['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
2114 if(outfile
=="-" and sys
.version
[0]>="3"):
2115 pretmpfilename
= download_from_url_file_with_httpx2(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
2116 tmpfilename
= pretmpfilename
['Filename'];
2117 downloadsize
= os
.path
.getsize(tmpfilename
);
2120 exec_time_start
= time
.time();
2121 with
open(tmpfilename
, 'rb') as ft
:
2124 databytes
= ft
.read(buffersize
[1]);
2125 if not databytes
: break;
2126 datasize
= len(databytes
);
2127 fulldatasize
= datasize
+ fulldatasize
;
2130 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
2131 downloaddiff
= fulldatasize
- prevdownsize
;
2132 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
2133 prevdownsize
= fulldatasize
;
2136 fdata
= f
.getvalue();
2139 os
.remove(tmpfilename
);
2140 exec_time_end
= time
.time();
2141 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
2142 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
2146 def download_from_url_to_file_with_httpx2(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
2147 returnval
= download_from_url_to_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, outfile
, outpath
, sleep
)
2151 def download_from_url_with_request3(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
2152 global geturls_download_sleep
, havebrotli
;
2154 sleep
= geturls_download_sleep
;
2155 urlparts
= urlparse
.urlparse(httpurl
);
2156 if(isinstance(httpheaders
, list)):
2157 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
2158 if(urlparts
.username
is not None or urlparts
.password
is not None):
2159 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
2160 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
2162 urllib_pool
= urllib3
.PoolManager(headers
=httpheaders
);
2163 if(postdata
is not None and not isinstance(postdata
, dict)):
2164 postdata
= urlencode(postdata
);
2166 if(httpmethod
=="GET"):
2167 geturls_text
= geturls_text
= urllib_pool
.request("GET", httpurl
, headers
=httpheaders
, preload_content
=False);
2168 elif(httpmethod
=="POST"):
2169 geturls_text
= geturls_text
= urllib_pool
.request("POST", httpurl
, body
=postdata
, headers
=httpheaders
, preload_content
=False);
2171 geturls_text
= geturls_text
= urllib_pool
.request("GET", httpurl
, headers
=httpheaders
, preload_content
=False);
2172 except urllib3
.exceptions
.ConnectTimeoutError
:
2173 log
.info("Error With URL "+httpurl
);
2175 except urllib3
.exceptions
.ConnectError
:
2176 log
.info("Error With URL "+httpurl
);
2178 except urllib3
.exceptions
.MaxRetryError
:
2179 log
.info("Error With URL "+httpurl
);
2181 except socket
.timeout
:
2182 log
.info("Error With URL "+httpurl
);
2184 log
.info("Downloading URL "+httpurl
);
2185 if(geturls_text
.info().get("Content-Encoding")=="gzip" or geturls_text
.info().get("Content-Encoding")=="deflate"):
2186 if(sys
.version
[0]=="2"):
2187 strbuf
= StringIO(geturls_text
.read());
2188 if(sys
.version
[0]>="3"):
2189 strbuf
= BytesIO(geturls_text
.read());
2190 gzstrbuf
= gzip
.GzipFile(fileobj
=strbuf
);
2191 returnval_content
= gzstrbuf
.read()[:];
2192 if(geturls_text
.info().get("Content-Encoding")!="gzip" and geturls_text
.info().get("Content-Encoding")!="deflate"):
2193 returnval_content
= geturls_text
.read()[:];
2194 if(geturls_text
.info().get("Content-Encoding")=="br" and havebrotli
):
2195 returnval_content
= brotli
.decompress(returnval_content
);
2196 returnval
= {'Type': "Content", 'Content': returnval_content
, 'Headers': dict(geturls_text
.info()), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': httpheaders
, 'URL': geturls_text
.geturl(), 'Code': geturls_text
.status
};
2197 geturls_text
.close();
2200 if(not haveurllib3
):
2201 def download_from_url_with_request3(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
2202 returnval
= download_from_url_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
)
2206 def download_from_url_file_with_request3(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
2207 global geturls_download_sleep
, tmpfileprefix
, tmpfilesuffix
;
2208 exec_time_start
= time
.time();
2209 myhash
= hashlib
.new("sha1");
2210 if(sys
.version
[0]=="2"):
2211 myhash
.update(httpurl
);
2212 myhash
.update(str(buffersize
));
2213 myhash
.update(str(exec_time_start
));
2214 if(sys
.version
[0]>="3"):
2215 myhash
.update(httpurl
.encode('utf-8'));
2216 myhash
.update(str(buffersize
).encode('utf-8'));
2217 myhash
.update(str(exec_time_start
).encode('utf-8'));
2218 newtmpfilesuffix
= tmpfilesuffix
+ str(myhash
.hexdigest());
2220 sleep
= geturls_download_sleep
;
2221 urlparts
= urlparse
.urlparse(httpurl
);
2222 if(isinstance(httpheaders
, list)):
2223 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
2224 if(urlparts
.username
is not None or urlparts
.password
is not None):
2225 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
2226 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
2228 urllib_pool
= urllib3
.PoolManager(headers
=httpheaders
);
2229 if(postdata
is not None and not isinstance(postdata
, dict)):
2230 postdata
= urlencode(postdata
);
2232 if(httpmethod
=="GET"):
2233 geturls_text
= geturls_text
= urllib_pool
.request("GET", httpurl
, headers
=httpheaders
, preload_content
=False);
2234 elif(httpmethod
=="POST"):
2235 geturls_text
= geturls_text
= urllib_pool
.request("POST", httpurl
, body
=postdata
, headers
=httpheaders
, preload_content
=False);
2237 geturls_text
= geturls_text
= urllib_pool
.request("GET", httpurl
, headers
=httpheaders
, preload_content
=False);
2238 except urllib3
.exceptions
.ConnectTimeoutError
:
2239 log
.info("Error With URL "+httpurl
);
2241 except urllib3
.exceptions
.ConnectError
:
2242 log
.info("Error With URL "+httpurl
);
2244 except urllib3
.exceptions
.MaxRetryError
:
2245 log
.info("Error With URL "+httpurl
);
2247 except socket
.timeout
:
2248 log
.info("Error With URL "+httpurl
);
2250 downloadsize
= int(geturls_text
.headers
.get('Content-Length'));
2251 if(downloadsize
is not None):
2252 downloadsize
= int(downloadsize
);
2253 if downloadsize
is None: downloadsize
= 0;
2256 log
.info("Downloading URL "+httpurl
);
2257 with tempfile
.NamedTemporaryFile('wb+', prefix
=tmpfileprefix
, suffix
=newtmpfilesuffix
, delete
=False) as f
:
2258 tmpfilename
= f
.name
;
2259 returnval
= {'Type': "File", 'Filename': tmpfilename
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'Headers': dict(geturls_text
.info()), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': httpheaders
, 'URL': geturls_text
.geturl(), 'Code': geturls_text
.status
};
2261 databytes
= geturls_text
.read(buffersize
);
2262 if not databytes
: break;
2263 datasize
= len(databytes
);
2264 fulldatasize
= datasize
+ fulldatasize
;
2267 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
2268 downloaddiff
= fulldatasize
- prevdownsize
;
2269 log
.info("Downloading "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Downloaded "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
2270 prevdownsize
= fulldatasize
;
2273 geturls_text
.close();
2274 exec_time_end
= time
.time();
2275 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to download file.");
2276 returnval
.update({'Filesize': os
.path
.getsize(tmpfilename
), 'DownloadTime': float(exec_time_start
- exec_time_end
), 'DownloadTimeReadable': hms_string(exec_time_start
- exec_time_end
)});
2279 if(not haveurllib3
):
2280 def download_from_url_file_with_request3(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
2281 returnval
= download_from_url_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
)
2285 def download_from_url_to_file_with_request3(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
2286 global geturls_download_sleep
;
2288 sleep
= geturls_download_sleep
;
2289 if(not outfile
=="-"):
2290 outpath
= outpath
.rstrip(os
.path
.sep
);
2291 filepath
= os
.path
.realpath(outpath
+os
.path
.sep
+outfile
);
2292 if(not os
.path
.exists(outpath
)):
2293 os
.makedirs(outpath
);
2294 if(os
.path
.exists(outpath
) and os
.path
.isfile(outpath
)):
2296 if(os
.path
.exists(filepath
) and os
.path
.isdir(filepath
)):
2298 pretmpfilename
= download_from_url_file_with_request3(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
2299 if(not pretmpfilename
):
2301 tmpfilename
= pretmpfilename
['Filename'];
2302 downloadsize
= os
.path
.getsize(tmpfilename
);
2304 log
.info("Moving file "+tmpfilename
+" to "+filepath
);
2305 exec_time_start
= time
.time();
2306 shutil
.move(tmpfilename
, filepath
);
2307 exec_time_end
= time
.time();
2308 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to move file.");
2309 if(os
.path
.exists(tmpfilename
)):
2310 os
.remove(tmpfilename
);
2311 returnval
= {'Type': "File", 'Filename': filepath
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
2312 if(outfile
=="-" and sys
.version
[0]=="2"):
2313 pretmpfilename
= download_from_url_file_with_request3(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
2314 if(not pretmpfilename
):
2316 tmpfilename
= pretmpfilename
['Filename'];
2317 downloadsize
= os
.path
.getsize(tmpfilename
);
2320 exec_time_start
= time
.time();
2321 with
open(tmpfilename
, 'rb') as ft
:
2324 databytes
= ft
.read(buffersize
[1]);
2325 if not databytes
: break;
2326 datasize
= len(databytes
);
2327 fulldatasize
= datasize
+ fulldatasize
;
2330 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
2331 downloaddiff
= fulldatasize
- prevdownsize
;
2332 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
2333 prevdownsize
= fulldatasize
;
2336 fdata
= f
.getvalue();
2339 os
.remove(tmpfilename
);
2340 exec_time_end
= time
.time();
2341 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
2342 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
2343 if(outfile
=="-" and sys
.version
[0]>="3"):
2344 pretmpfilename
= download_from_url_file_with_request3(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
2345 tmpfilename
= pretmpfilename
['Filename'];
2346 downloadsize
= os
.path
.getsize(tmpfilename
);
2349 exec_time_start
= time
.time();
2350 with
open(tmpfilename
, 'rb') as ft
:
2353 databytes
= ft
.read(buffersize
[1]);
2354 if not databytes
: break;
2355 datasize
= len(databytes
);
2356 fulldatasize
= datasize
+ fulldatasize
;
2359 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
2360 downloaddiff
= fulldatasize
- prevdownsize
;
2361 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
2362 prevdownsize
= fulldatasize
;
2365 fdata
= f
.getvalue();
2368 os
.remove(tmpfilename
);
2369 exec_time_end
= time
.time();
2370 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
2371 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
2374 if(not haveurllib3
):
2375 def download_from_url_to_file_with_request3(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
2376 returnval
= download_from_url_to_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, outfile
, outpath
, sleep
)
2380 def download_from_url_with_urllib3(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
2381 global geturls_download_sleep
, havebrotli
;
2383 sleep
= geturls_download_sleep
;
2384 urlparts
= urlparse
.urlparse(httpurl
);
2385 if(isinstance(httpheaders
, list)):
2386 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
2387 if(urlparts
.username
is not None or urlparts
.password
is not None):
2388 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
2389 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
2391 urllib_pool
= urllib3
.PoolManager(headers
=httpheaders
);
2392 if(postdata
is not None and not isinstance(postdata
, dict)):
2393 postdata
= urlencode(postdata
);
2395 if(httpmethod
=="GET"):
2396 geturls_text
= urllib_pool
.urlopen("GET", httpurl
, headers
=httpheaders
, preload_content
=False);
2397 elif(httpmethod
=="POST"):
2398 geturls_text
= urllib_pool
.urlopen("GET", httpurl
, body
=postdata
, headers
=httpheaders
, preload_content
=False);
2400 geturls_text
= urllib_pool
.urlopen("GET", httpurl
, headers
=httpheaders
, preload_content
=False);
2401 except urllib3
.exceptions
.ConnectTimeoutError
:
2402 log
.info("Error With URL "+httpurl
);
2404 except urllib3
.exceptions
.ConnectError
:
2405 log
.info("Error With URL "+httpurl
);
2407 except urllib3
.exceptions
.MaxRetryError
:
2408 log
.info("Error With URL "+httpurl
);
2410 except socket
.timeout
:
2411 log
.info("Error With URL "+httpurl
);
2413 log
.info("Downloading URL "+httpurl
);
2414 if(geturls_text
.info().get("Content-Encoding")=="gzip" or geturls_text
.info().get("Content-Encoding")=="deflate"):
2415 if(sys
.version
[0]=="2"):
2416 strbuf
= StringIO(geturls_text
.read());
2417 if(sys
.version
[0]>="3"):
2418 strbuf
= BytesIO(geturls_text
.read());
2419 gzstrbuf
= gzip
.GzipFile(fileobj
=strbuf
);
2420 returnval_content
= gzstrbuf
.read()[:];
2421 if(geturls_text
.info().get("Content-Encoding")!="gzip" and geturls_text
.info().get("Content-Encoding")!="deflate"):
2422 returnval_content
= geturls_text
.read()[:];
2423 if(geturls_text
.info().get("Content-Encoding")=="br" and havebrotli
):
2424 returnval_content
= brotli
.decompress(returnval_content
);
2425 returnval
= {'Type': "Content", 'Content': returnval_content
, 'Headers': dict(geturls_text
.info()), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': httpheaders
, 'URL': geturls_text
.geturl(), 'Code': geturls_text
.status
};
2426 geturls_text
.close();
2429 if(not haveurllib3
):
2430 def download_from_url_with_urllib3(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
2431 returnval
= download_from_url_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
)
2435 def download_from_url_file_with_urllib3(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
2436 global geturls_download_sleep
, tmpfileprefix
, tmpfilesuffix
;
2437 exec_time_start
= time
.time();
2438 myhash
= hashlib
.new("sha1");
2439 if(sys
.version
[0]=="2"):
2440 myhash
.update(httpurl
);
2441 myhash
.update(str(buffersize
));
2442 myhash
.update(str(exec_time_start
));
2443 if(sys
.version
[0]>="3"):
2444 myhash
.update(httpurl
.encode('utf-8'));
2445 myhash
.update(str(buffersize
).encode('utf-8'));
2446 myhash
.update(str(exec_time_start
).encode('utf-8'));
2447 newtmpfilesuffix
= tmpfilesuffix
+ str(myhash
.hexdigest());
2449 sleep
= geturls_download_sleep
;
2450 urlparts
= urlparse
.urlparse(httpurl
);
2451 if(isinstance(httpheaders
, list)):
2452 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
2453 if(urlparts
.username
is not None or urlparts
.password
is not None):
2454 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
2455 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
2457 urllib_pool
= urllib3
.PoolManager(headers
=httpheaders
);
2458 if(postdata
is not None and not isinstance(postdata
, dict)):
2459 postdata
= urlencode(postdata
);
2461 if(httpmethod
=="GET"):
2462 geturls_text
= urllib_pool
.urlopen("GET", httpurl
, headers
=httpheaders
, preload_content
=False);
2463 elif(httpmethod
=="POST"):
2464 geturls_text
= urllib_pool
.urlopen("GET", httpurl
, body
=postdata
, headers
=httpheaders
, preload_content
=False);
2466 geturls_text
= urllib_pool
.urlopen("GET", httpurl
, headers
=httpheaders
, preload_content
=False);
2467 except urllib3
.exceptions
.ConnectTimeoutError
:
2468 log
.info("Error With URL "+httpurl
);
2470 except urllib3
.exceptions
.ConnectError
:
2471 log
.info("Error With URL "+httpurl
);
2473 except urllib3
.exceptions
.MaxRetryError
:
2474 log
.info("Error With URL "+httpurl
);
2476 except socket
.timeout
:
2477 log
.info("Error With URL "+httpurl
);
2479 downloadsize
= int(geturls_text
.headers
.get('Content-Length'));
2480 if(downloadsize
is not None):
2481 downloadsize
= int(downloadsize
);
2482 if downloadsize
is None: downloadsize
= 0;
2485 log
.info("Downloading URL "+httpurl
);
2486 with tempfile
.NamedTemporaryFile('wb+', prefix
=tmpfileprefix
, suffix
=newtmpfilesuffix
, delete
=False) as f
:
2487 tmpfilename
= f
.name
;
2488 returnval
= {'Type': "File", 'Filename': tmpfilename
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'Headers': dict(geturls_text
.info()), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': httpheaders
, 'URL': geturls_text
.geturl(), 'Code': geturls_text
.status
};
2490 databytes
= geturls_text
.read(buffersize
);
2491 if not databytes
: break;
2492 datasize
= len(databytes
);
2493 fulldatasize
= datasize
+ fulldatasize
;
2496 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
2497 downloaddiff
= fulldatasize
- prevdownsize
;
2498 log
.info("Downloading "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Downloaded "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
2499 prevdownsize
= fulldatasize
;
2502 geturls_text
.close();
2503 exec_time_end
= time
.time();
2504 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to download file.");
2505 returnval
.update({'Filesize': os
.path
.getsize(tmpfilename
), 'DownloadTime': float(exec_time_start
- exec_time_end
), 'DownloadTimeReadable': hms_string(exec_time_start
- exec_time_end
)});
2508 if(not haveurllib3
):
2509 def download_from_url_file_with_urllib3(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
2510 returnval
= download_from_url_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
)
2514 def download_from_url_to_file_with_urllib3(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
2515 global geturls_download_sleep
;
2517 sleep
= geturls_download_sleep
;
2518 if(not outfile
=="-"):
2519 outpath
= outpath
.rstrip(os
.path
.sep
);
2520 filepath
= os
.path
.realpath(outpath
+os
.path
.sep
+outfile
);
2521 if(not os
.path
.exists(outpath
)):
2522 os
.makedirs(outpath
);
2523 if(os
.path
.exists(outpath
) and os
.path
.isfile(outpath
)):
2525 if(os
.path
.exists(filepath
) and os
.path
.isdir(filepath
)):
2527 pretmpfilename
= download_from_url_file_with_urllib3(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
2528 if(not pretmpfilename
):
2530 tmpfilename
= pretmpfilename
['Filename'];
2531 downloadsize
= os
.path
.getsize(tmpfilename
);
2533 log
.info("Moving file "+tmpfilename
+" to "+filepath
);
2534 exec_time_start
= time
.time();
2535 shutil
.move(tmpfilename
, filepath
);
2536 exec_time_end
= time
.time();
2537 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to move file.");
2538 if(os
.path
.exists(tmpfilename
)):
2539 os
.remove(tmpfilename
);
2540 returnval
= {'Type': "File", 'Filename': filepath
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
2541 if(outfile
=="-" and sys
.version
[0]=="2"):
2542 pretmpfilename
= download_from_url_file_with_urllib3(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
2543 if(not pretmpfilename
):
2545 tmpfilename
= pretmpfilename
['Filename'];
2546 downloadsize
= os
.path
.getsize(tmpfilename
);
2549 exec_time_start
= time
.time();
2550 with
open(tmpfilename
, 'rb') as ft
:
2553 databytes
= ft
.read(buffersize
[1]);
2554 if not databytes
: break;
2555 datasize
= len(databytes
);
2556 fulldatasize
= datasize
+ fulldatasize
;
2559 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
2560 downloaddiff
= fulldatasize
- prevdownsize
;
2561 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
2562 prevdownsize
= fulldatasize
;
2565 fdata
= f
.getvalue();
2568 os
.remove(tmpfilename
);
2569 exec_time_end
= time
.time();
2570 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
2571 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
2572 if(outfile
=="-" and sys
.version
[0]>="3"):
2573 pretmpfilename
= download_from_url_file_with_urllib3(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
2574 tmpfilename
= pretmpfilename
['Filename'];
2575 downloadsize
= os
.path
.getsize(tmpfilename
);
2578 exec_time_start
= time
.time();
2579 with
open(tmpfilename
, 'rb') as ft
:
2582 databytes
= ft
.read(buffersize
[1]);
2583 if not databytes
: break;
2584 datasize
= len(databytes
);
2585 fulldatasize
= datasize
+ fulldatasize
;
2588 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
2589 downloaddiff
= fulldatasize
- prevdownsize
;
2590 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
2591 prevdownsize
= fulldatasize
;
2594 fdata
= f
.getvalue();
2597 os
.remove(tmpfilename
);
2598 exec_time_end
= time
.time();
2599 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
2600 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
2603 if(not haveurllib3
):
2604 def download_from_url_to_file_with_urllib3(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
2605 returnval
= download_from_url_to_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, outfile
, outpath
, sleep
)
2609 def download_from_url_with_mechanize(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
2610 global geturls_download_sleep
, havebrotli
;
2612 sleep
= geturls_download_sleep
;
2613 urlparts
= urlparse
.urlparse(httpurl
);
2614 if(isinstance(httpheaders
, list)):
2615 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
2616 if(urlparts
.username
is not None or urlparts
.password
is not None):
2617 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
2618 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
2619 geturls_opener
= mechanize
.Browser();
2620 if(isinstance(httpheaders
, dict)):
2621 httpheaders
= make_http_headers_from_dict_to_list(httpheaders
);
2623 geturls_opener
.addheaders
= httpheaders
;
2624 geturls_opener
.set_cookiejar(httpcookie
);
2625 geturls_opener
.set_handle_robots(False);
2626 if(postdata
is not None and not isinstance(postdata
, dict)):
2627 postdata
= urlencode(postdata
);
2629 if(httpmethod
=="GET"):
2630 geturls_text
= geturls_opener
.open(httpurl
);
2631 elif(httpmethod
=="POST"):
2632 geturls_text
= geturls_opener
.open(httpurl
, data
=postdata
);
2634 geturls_text
= geturls_opener
.open(httpurl
);
2635 except mechanize
.HTTPError
as geturls_text_error
:
2636 geturls_text
= geturls_text_error
;
2637 log
.info("Error With URL "+httpurl
);
2639 log
.info("Error With URL "+httpurl
);
2641 except socket
.timeout
:
2642 log
.info("Error With URL "+httpurl
);
2644 log
.info("Downloading URL "+httpurl
);
2645 if(geturls_text
.info().get("Content-Encoding")=="gzip" or geturls_text
.info().get("Content-Encoding")=="deflate"):
2646 if(sys
.version
[0]=="2"):
2647 strbuf
= StringIO(geturls_text
.read());
2648 if(sys
.version
[0]>="3"):
2649 strbuf
= BytesIO(geturls_text
.read());
2650 gzstrbuf
= gzip
.GzipFile(fileobj
=strbuf
);
2651 returnval_content
= gzstrbuf
.read()[:];
2652 if(geturls_text
.info().get("Content-Encoding")!="gzip" and geturls_text
.info().get("Content-Encoding")!="deflate"):
2653 returnval_content
= geturls_text
.read()[:];
2654 if(geturls_text
.info().get("Content-Encoding")=="br" and havebrotli
):
2655 returnval_content
= brotli
.decompress(returnval_content
);
2656 returnval
= {'Type': "Content", 'Content': returnval_content
, 'Headers': dict(geturls_text
.info()), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': make_http_headers_from_list_to_dict(httpheaders
), 'URL': geturls_text
.geturl(), 'Code': geturls_text
.code
};
2657 geturls_text
.close();
2660 if(not havemechanize
):
2661 def download_from_url_with_mechanize(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
2662 returnval
= download_from_url_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, sleep
)
2666 def download_from_url_file_with_mechanize(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
2667 global geturls_download_sleep
, tmpfileprefix
, tmpfilesuffix
;
2668 exec_time_start
= time
.time();
2669 myhash
= hashlib
.new("sha1");
2670 if(sys
.version
[0]=="2"):
2671 myhash
.update(httpurl
);
2672 myhash
.update(str(buffersize
));
2673 myhash
.update(str(exec_time_start
));
2674 if(sys
.version
[0]>="3"):
2675 myhash
.update(httpurl
.encode('utf-8'));
2676 myhash
.update(str(buffersize
).encode('utf-8'));
2677 myhash
.update(str(exec_time_start
).encode('utf-8'));
2678 newtmpfilesuffix
= tmpfilesuffix
+ str(myhash
.hexdigest());
2680 sleep
= geturls_download_sleep
;
2681 urlparts
= urlparse
.urlparse(httpurl
);
2682 if(isinstance(httpheaders
, list)):
2683 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
2684 if(urlparts
.username
is not None or urlparts
.password
is not None):
2685 inurlencode
= b64encode(str(urlparts
.username
+":"+urlparts
.password
).encode()).decode("UTF-8");
2686 httpheaders
.update( { 'Authorization': "Basic "+inurlencode
} );
2687 geturls_opener
= mechanize
.Browser();
2688 if(isinstance(httpheaders
, dict)):
2689 httpheaders
= make_http_headers_from_dict_to_list(httpheaders
);
2691 geturls_opener
.addheaders
= httpheaders
;
2692 geturls_opener
.set_cookiejar(httpcookie
);
2693 geturls_opener
.set_handle_robots(False);
2694 if(postdata
is not None and not isinstance(postdata
, dict)):
2695 postdata
= urlencode(postdata
);
2697 if(httpmethod
=="GET"):
2698 geturls_text
= geturls_opener
.open(httpurl
);
2699 elif(httpmethod
=="POST"):
2700 geturls_text
= geturls_opener
.open(httpurl
, data
=postdata
);
2702 geturls_text
= geturls_opener
.open(httpurl
);
2703 except mechanize
.HTTPError
as geturls_text_error
:
2704 geturls_text
= geturls_text_error
;
2705 log
.info("Error With URL "+httpurl
);
2707 log
.info("Error With URL "+httpurl
);
2709 except socket
.timeout
:
2710 log
.info("Error With URL "+httpurl
);
2712 downloadsize
= int(geturls_text
.info().get('Content-Length'));
2713 if(downloadsize
is not None):
2714 downloadsize
= int(downloadsize
);
2715 if downloadsize
is None: downloadsize
= 0;
2718 log
.info("Downloading URL "+httpurl
);
2719 with tempfile
.NamedTemporaryFile('wb+', prefix
=tmpfileprefix
, suffix
=newtmpfilesuffix
, delete
=False) as f
:
2720 tmpfilename
= f
.name
;
2721 returnval
= {'Type': "File", 'Filename': tmpfilename
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'Headers': dict(geturls_text
.info()), 'Version': "1.1", 'Method': httpmethod
, 'HeadersSent': make_http_headers_from_list_to_dict(httpheaders
), 'URL': geturls_text
.geturl(), 'Code': geturls_text
.code
};
2723 databytes
= geturls_text
.read(buffersize
);
2724 if not databytes
: break;
2725 datasize
= len(databytes
);
2726 fulldatasize
= datasize
+ fulldatasize
;
2729 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
2730 downloaddiff
= fulldatasize
- prevdownsize
;
2731 log
.info("Downloading "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Downloaded "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
2732 prevdownsize
= fulldatasize
;
2735 geturls_text
.close();
2736 exec_time_end
= time
.time();
2737 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to download file.");
2738 returnval
.update({'Filesize': os
.path
.getsize(tmpfilename
), 'DownloadTime': float(exec_time_start
- exec_time_end
), 'DownloadTimeReadable': hms_string(exec_time_start
- exec_time_end
)});
2741 if(not havemechanize
):
2742 def download_from_url_file_with_mechanize(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
2743 returnval
= download_from_url_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, sleep
)
2747 def download_from_url_to_file_with_mechanize(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
2748 global geturls_download_sleep
;
2750 sleep
= geturls_download_sleep
;
2751 if(not outfile
=="-"):
2752 outpath
= outpath
.rstrip(os
.path
.sep
);
2753 filepath
= os
.path
.realpath(outpath
+os
.path
.sep
+outfile
);
2754 if(not os
.path
.exists(outpath
)):
2755 os
.makedirs(outpath
);
2756 if(os
.path
.exists(outpath
) and os
.path
.isfile(outpath
)):
2758 if(os
.path
.exists(filepath
) and os
.path
.isdir(filepath
)):
2760 pretmpfilename
= download_from_url_file_with_mechanize(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
2761 if(not pretmpfilename
):
2763 tmpfilename
= pretmpfilename
['Filename'];
2764 downloadsize
= os
.path
.getsize(tmpfilename
);
2766 log
.info("Moving file "+tmpfilename
+" to "+filepath
);
2767 exec_time_start
= time
.time();
2768 shutil
.move(tmpfilename
, filepath
);
2769 exec_time_end
= time
.time();
2770 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to move file.");
2771 if(os
.path
.exists(tmpfilename
)):
2772 os
.remove(tmpfilename
);
2773 returnval
= {'Type': "File", 'Filename': filepath
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
2774 if(outfile
=="-" and sys
.version
[0]=="2"):
2775 pretmpfilename
= download_from_url_file_with_mechanize(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
2776 if(not pretmpfilename
):
2778 tmpfilename
= pretmpfilename
['Filename'];
2779 downloadsize
= os
.path
.getsize(tmpfilename
);
2782 exec_time_start
= time
.time();
2783 with
open(tmpfilename
, 'rb') as ft
:
2786 databytes
= ft
.read(buffersize
[1]);
2787 if not databytes
: break;
2788 datasize
= len(databytes
);
2789 fulldatasize
= datasize
+ fulldatasize
;
2792 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
2793 downloaddiff
= fulldatasize
- prevdownsize
;
2794 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
2795 prevdownsize
= fulldatasize
;
2798 fdata
= f
.getvalue();
2801 os
.remove(tmpfilename
);
2802 exec_time_end
= time
.time();
2803 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
2804 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
2805 if(outfile
=="-" and sys
.version
[0]>="3"):
2806 pretmpfilename
= download_from_url_file_with_mechanize(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
2807 tmpfilename
= pretmpfilename
['Filename'];
2808 downloadsize
= os
.path
.getsize(tmpfilename
);
2811 exec_time_start
= time
.time();
2812 with
open(tmpfilename
, 'rb') as ft
:
2815 databytes
= ft
.read(buffersize
[1]);
2816 if not databytes
: break;
2817 datasize
= len(databytes
);
2818 fulldatasize
= datasize
+ fulldatasize
;
2821 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
2822 downloaddiff
= fulldatasize
- prevdownsize
;
2823 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
2824 prevdownsize
= fulldatasize
;
2827 fdata
= f
.getvalue();
2830 os
.remove(tmpfilename
);
2831 exec_time_end
= time
.time();
2832 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
2833 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': httpmethod
, 'HeadersSent': ['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
2836 if(not havemechanize
):
2837 def download_from_url_to_file_with_mechanize(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
2838 returnval
= download_from_url_to_file_with_urllib(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
, outfile
, outpath
, sleep
)
2841 def download_file_from_ftp_file(url
):
2842 urlparts
= urlparse
.urlparse(url
);
2843 file_name
= os
.path
.basename(urlparts
.path
);
2844 file_dir
= os
.path
.dirname(urlparts
.path
);
2845 if(urlparts
.username
is not None):
2846 ftp_username
= urlparts
.username
;
2848 ftp_username
= "anonymous";
2849 if(urlparts
.password
is not None):
2850 ftp_password
= urlparts
.password
;
2851 elif(urlparts
.password
is None and urlparts
.username
=="anonymous"):
2852 ftp_password
= "anonymous";
2855 if(urlparts
.scheme
=="ftp"):
2857 elif(urlparts
.scheme
=="ftps"):
2861 if(urlparts
.scheme
=="http" or urlparts
.scheme
=="https"):
2863 ftp_port
= urlparts
.port
;
2864 if(urlparts
.port
is None):
2867 ftp
.connect(urlparts
.hostname
, ftp_port
);
2868 except socket
.gaierror
:
2869 log
.info("Error With URL "+httpurl
);
2871 except socket
.timeout
:
2872 log
.info("Error With URL "+httpurl
);
2874 ftp
.login(urlparts
.username
, urlparts
.password
);
2875 if(urlparts
.scheme
=="ftps"):
2877 ftpfile
= BytesIO();
2878 ftp
.retrbinary("RETR "+urlparts
.path
, ftpfile
.write
);
2879 #ftp.storbinary("STOR "+urlparts.path, ftpfile.write);
2884 def download_file_from_ftp_string(url
):
2885 ftpfile
= download_file_from_ftp_file(url
);
2886 return ftpfile
.read();
2888 def download_from_url_with_ftp(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
2889 global geturls_download_sleep
, havebrotli
;
2891 sleep
= geturls_download_sleep
;
2892 urlparts
= urlparse
.urlparse(httpurl
);
2893 if(isinstance(httpheaders
, list)):
2894 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
2895 if(isinstance(httpheaders
, dict)):
2896 httpheaders
= make_http_headers_from_dict_to_list(httpheaders
);
2898 geturls_text
= download_file_from_ftp_file(httpurl
);
2899 log
.info("Downloading URL "+httpurl
);
2900 returnval_content
= geturls_text
.read()[:];
2901 returnval
= {'Type': "Content", 'Content': returnval_content
, 'Headers': None, 'Version': None, 'Method': None, 'HeadersSent': None, 'URL': httpurl
, 'Code': None};
2902 geturls_text
.close();
2905 def download_from_url_file_with_ftp(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
2906 global geturls_download_sleep
, tmpfileprefix
, tmpfilesuffix
;
2907 exec_time_start
= time
.time();
2908 myhash
= hashlib
.new("sha1");
2909 if(sys
.version
[0]=="2"):
2910 myhash
.update(httpurl
);
2911 myhash
.update(str(buffersize
));
2912 myhash
.update(str(exec_time_start
));
2913 if(sys
.version
[0]>="3"):
2914 myhash
.update(httpurl
.encode('utf-8'));
2915 myhash
.update(str(buffersize
).encode('utf-8'));
2916 myhash
.update(str(exec_time_start
).encode('utf-8'));
2917 newtmpfilesuffix
= tmpfilesuffix
+ str(myhash
.hexdigest());
2919 sleep
= geturls_download_sleep
;
2920 urlparts
= urlparse
.urlparse(httpurl
);
2921 if(isinstance(httpheaders
, list)):
2922 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
2923 if(isinstance(httpheaders
, dict)):
2924 httpheaders
= make_http_headers_from_dict_to_list(httpheaders
);
2926 geturls_text
= download_file_from_ftp_file(httpurl
);
2927 geturls_text
.seek(0, 2);
2928 downloadsize
= geturls_text
.tell();
2929 geturls_text
.seek(0, 0);
2930 if(downloadsize
is not None):
2931 downloadsize
= int(downloadsize
);
2932 if downloadsize
is None: downloadsize
= 0;
2935 log
.info("Downloading URL "+httpurl
);
2936 with tempfile
.NamedTemporaryFile('wb+', prefix
=tmpfileprefix
, suffix
=newtmpfilesuffix
, delete
=False) as f
:
2937 tmpfilename
= f
.name
;
2938 returnval
= {'Type': "File", 'Filename': tmpfilename
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'Headers': None, 'Version': None, 'Method': None, 'HeadersSent': None, 'URL': httpurl
, 'Code': None};
2940 databytes
= geturls_text
.read(buffersize
);
2941 if not databytes
: break;
2942 datasize
= len(databytes
);
2943 fulldatasize
= datasize
+ fulldatasize
;
2946 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
2947 downloaddiff
= fulldatasize
- prevdownsize
;
2948 log
.info("Downloading "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Downloaded "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
2949 prevdownsize
= fulldatasize
;
2952 geturls_text
.close();
2953 exec_time_end
= time
.time();
2954 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to download file.");
2955 returnval
.update({'Filesize': os
.path
.getsize(tmpfilename
), 'DownloadTime': float(exec_time_start
- exec_time_end
), 'DownloadTimeReadable': hms_string(exec_time_start
- exec_time_end
)});
2958 def download_from_url_to_file_with_ftp(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
2959 global geturls_download_sleep
;
2961 sleep
= geturls_download_sleep
;
2962 if(not outfile
=="-"):
2963 outpath
= outpath
.rstrip(os
.path
.sep
);
2964 filepath
= os
.path
.realpath(outpath
+os
.path
.sep
+outfile
);
2965 if(not os
.path
.exists(outpath
)):
2966 os
.makedirs(outpath
);
2967 if(os
.path
.exists(outpath
) and os
.path
.isfile(outpath
)):
2969 if(os
.path
.exists(filepath
) and os
.path
.isdir(filepath
)):
2971 pretmpfilename
= download_from_url_file_with_ftp(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
2972 if(not pretmpfilename
):
2974 tmpfilename
= pretmpfilename
['Filename'];
2975 downloadsize
= os
.path
.getsize(tmpfilename
);
2977 log
.info("Moving file "+tmpfilename
+" to "+filepath
);
2978 exec_time_start
= time
.time();
2979 shutil
.move(tmpfilename
, filepath
);
2980 exec_time_end
= time
.time();
2981 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to move file.");
2982 if(os
.path
.exists(tmpfilename
)):
2983 os
.remove(tmpfilename
);
2984 returnval
= {'Type': "File", 'Filename': filepath
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': None, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
2985 if(outfile
=="-" and sys
.version
[0]=="2"):
2986 pretmpfilename
= download_from_url_file_with_ftp(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
2987 if(not pretmpfilename
):
2989 tmpfilename
= pretmpfilename
['Filename'];
2990 downloadsize
= os
.path
.getsize(tmpfilename
);
2993 exec_time_start
= time
.time();
2994 with
open(tmpfilename
, 'rb') as ft
:
2997 databytes
= ft
.read(buffersize
[1]);
2998 if not databytes
: break;
2999 datasize
= len(databytes
);
3000 fulldatasize
= datasize
+ fulldatasize
;
3003 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
3004 downloaddiff
= fulldatasize
- prevdownsize
;
3005 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
3006 prevdownsize
= fulldatasize
;
3009 fdata
= f
.getvalue();
3012 os
.remove(tmpfilename
);
3013 exec_time_end
= time
.time();
3014 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
3015 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': None, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
3016 if(outfile
=="-" and sys
.version
[0]>="3"):
3017 pretmpfilename
= download_from_url_file_with_ftp(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
3018 tmpfilename
= pretmpfilename
['Filename'];
3019 downloadsize
= os
.path
.getsize(tmpfilename
);
3022 exec_time_start
= time
.time();
3023 with
open(tmpfilename
, 'rb') as ft
:
3026 databytes
= ft
.read(buffersize
[1]);
3027 if not databytes
: break;
3028 datasize
= len(databytes
);
3029 fulldatasize
= datasize
+ fulldatasize
;
3032 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
3033 downloaddiff
= fulldatasize
- prevdownsize
;
3034 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
3035 prevdownsize
= fulldatasize
;
3038 fdata
= f
.getvalue();
3041 os
.remove(tmpfilename
);
3042 exec_time_end
= time
.time();
3043 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
3044 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': None, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
3047 def upload_file_to_ftp_file(ftpfile
, url
):
3048 urlparts
= urlparse
.urlparse(url
);
3049 file_name
= os
.path
.basename(urlparts
.path
);
3050 file_dir
= os
.path
.dirname(urlparts
.path
);
3051 if(urlparts
.username
is not None):
3052 ftp_username
= urlparts
.username
;
3054 ftp_username
= "anonymous";
3055 if(urlparts
.password
is not None):
3056 ftp_password
= urlparts
.password
;
3057 elif(urlparts
.password
is None and urlparts
.username
=="anonymous"):
3058 ftp_password
= "anonymous";
3061 if(urlparts
.scheme
=="ftp"):
3063 elif(urlparts
.scheme
=="ftps"):
3067 if(urlparts
.scheme
=="http" or urlparts
.scheme
=="https"):
3069 ftp_port
= urlparts
.port
;
3070 if(urlparts
.port
is None):
3073 ftp
.connect(urlparts
.hostname
, ftp_port
);
3074 except socket
.gaierror
:
3075 log
.info("Error With URL "+httpurl
);
3077 except socket
.timeout
:
3078 log
.info("Error With URL "+httpurl
);
3080 ftp
.login(urlparts
.username
, urlparts
.password
);
3081 if(urlparts
.scheme
=="ftps"):
3083 ftp
.storbinary("STOR "+urlparts
.path
, ftpfile
);
3088 def upload_file_to_ftp_string(ftpstring
, url
):
3089 ftpfileo
= BytesIO(ftpstring
);
3090 ftpfile
= upload_file_to_ftp_file(ftpfileo
, url
);
3095 def download_file_from_sftp_file(url
):
3096 urlparts
= urlparse
.urlparse(url
);
3097 file_name
= os
.path
.basename(urlparts
.path
);
3098 file_dir
= os
.path
.dirname(urlparts
.path
);
3099 if(urlparts
.scheme
=="http" or urlparts
.scheme
=="https"):
3101 sftp_port
= urlparts
.port
;
3102 if(urlparts
.port
is None):
3105 sftp_port
= urlparts
.port
;
3106 if(urlparts
.username
is not None):
3107 sftp_username
= urlparts
.username
;
3109 sftp_username
= "anonymous";
3110 if(urlparts
.password
is not None):
3111 sftp_password
= urlparts
.password
;
3112 elif(urlparts
.password
is None and urlparts
.username
=="anonymous"):
3113 sftp_password
= "anonymous";
3116 if(urlparts
.scheme
!="sftp"):
3118 ssh
= paramiko
.SSHClient();
3119 ssh
.load_system_host_keys();
3120 ssh
.set_missing_host_key_policy(paramiko
.AutoAddPolicy());
3122 ssh
.connect(urlparts
.hostname
, port
=sftp_port
, username
=urlparts
.username
, password
=urlparts
.password
);
3123 except paramiko
.ssh_exception
.SSHException
:
3125 except socket
.gaierror
:
3126 log
.info("Error With URL "+httpurl
);
3128 except socket
.timeout
:
3129 log
.info("Error With URL "+httpurl
);
3131 sftp
= ssh
.open_sftp();
3132 sftpfile
= BytesIO();
3133 sftp
.getfo(urlparts
.path
, sftpfile
);
3136 sftpfile
.seek(0, 0);
3139 def download_file_from_sftp_file(url
):
3143 def download_file_from_sftp_string(url
):
3144 sftpfile
= download_file_from_sftp_file(url
);
3145 return sftpfile
.read();
3147 def download_file_from_ftp_string(url
):
3151 def download_from_url_with_sftp(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
3152 global geturls_download_sleep
, havebrotli
;
3154 sleep
= geturls_download_sleep
;
3155 urlparts
= urlparse
.urlparse(httpurl
);
3156 if(isinstance(httpheaders
, list)):
3157 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
3158 if(isinstance(httpheaders
, dict)):
3159 httpheaders
= make_http_headers_from_dict_to_list(httpheaders
);
3161 geturls_text
= download_file_from_sftp_file(httpurl
);
3162 log
.info("Downloading URL "+httpurl
);
3163 returnval_content
= geturls_text
.read()[:];
3164 returnval
= {'Type': "Content", 'Content': returnval_content
, 'Headers': None, 'Version': None, 'Method': None, 'HeadersSent': None, 'URL': httpurl
, 'Code': None};
3165 geturls_text
.close();
3168 if(not haveparamiko
):
3169 def download_from_url_with_sftp(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, sleep
=-1):
3173 def download_from_url_file_with_sftp(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
3174 global geturls_download_sleep
, tmpfileprefix
, tmpfilesuffix
;
3175 exec_time_start
= time
.time();
3176 myhash
= hashlib
.new("sha1");
3177 if(sys
.version
[0]=="2"):
3178 myhash
.update(httpurl
);
3179 myhash
.update(str(buffersize
));
3180 myhash
.update(str(exec_time_start
));
3181 if(sys
.version
[0]>="3"):
3182 myhash
.update(httpurl
.encode('utf-8'));
3183 myhash
.update(str(buffersize
).encode('utf-8'));
3184 myhash
.update(str(exec_time_start
).encode('utf-8'));
3185 newtmpfilesuffix
= tmpfilesuffix
+ str(myhash
.hexdigest());
3187 sleep
= geturls_download_sleep
;
3188 urlparts
= urlparse
.urlparse(httpurl
);
3189 if(isinstance(httpheaders
, list)):
3190 httpheaders
= make_http_headers_from_list_to_dict(httpheaders
);
3191 if(isinstance(httpheaders
, dict)):
3192 httpheaders
= make_http_headers_from_dict_to_list(httpheaders
);
3194 geturls_text
= download_file_from_sftp_file(httpurl
);
3195 geturls_text
.seek(0, 2);
3196 downloadsize
= geturls_text
.tell();
3197 geturls_text
.seek(0, 0);
3198 if(downloadsize
is not None):
3199 downloadsize
= int(downloadsize
);
3200 if downloadsize
is None: downloadsize
= 0;
3203 log
.info("Downloading URL "+httpurl
);
3204 with tempfile
.NamedTemporaryFile('wb+', prefix
=tmpfileprefix
, suffix
=newtmpfilesuffix
, delete
=False) as f
:
3205 tmpfilename
= f
.name
;
3206 returnval
= {'Type': "File", 'Filename': tmpfilename
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'Headers': None, 'Version': None, 'Method': None, 'HeadersSent': None, 'URL': httpurl
, 'Code': None};
3208 databytes
= geturls_text
.read(buffersize
);
3209 if not databytes
: break;
3210 datasize
= len(databytes
);
3211 fulldatasize
= datasize
+ fulldatasize
;
3214 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
3215 downloaddiff
= fulldatasize
- prevdownsize
;
3216 log
.info("Downloading "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Downloaded "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
3217 prevdownsize
= fulldatasize
;
3220 geturls_text
.close();
3221 exec_time_end
= time
.time();
3222 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to download file.");
3223 returnval
.update({'Filesize': os
.path
.getsize(tmpfilename
), 'DownloadTime': float(exec_time_start
- exec_time_end
), 'DownloadTimeReadable': hms_string(exec_time_start
- exec_time_end
)});
3226 if(not haveparamiko
):
3227 def download_from_url_file_with_sftp(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, buffersize
=524288, sleep
=-1):
3231 def download_from_url_to_file_with_sftp(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
3232 global geturls_download_sleep
;
3234 sleep
= geturls_download_sleep
;
3235 if(not outfile
=="-"):
3236 outpath
= outpath
.rstrip(os
.path
.sep
);
3237 filepath
= os
.path
.realpath(outpath
+os
.path
.sep
+outfile
);
3238 if(not os
.path
.exists(outpath
)):
3239 os
.makedirs(outpath
);
3240 if(os
.path
.exists(outpath
) and os
.path
.isfile(outpath
)):
3242 if(os
.path
.exists(filepath
) and os
.path
.isdir(filepath
)):
3244 pretmpfilename
= download_from_url_file_with_sftp(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
3245 if(not pretmpfilename
):
3247 tmpfilename
= pretmpfilename
['Filename'];
3248 downloadsize
= os
.path
.getsize(tmpfilename
);
3250 log
.info("Moving file "+tmpfilename
+" to "+filepath
);
3251 exec_time_start
= time
.time();
3252 shutil
.move(tmpfilename
, filepath
);
3253 exec_time_end
= time
.time();
3254 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to move file.");
3255 if(os
.path
.exists(tmpfilename
)):
3256 os
.remove(tmpfilename
);
3257 returnval
= {'Type': "File", 'Filename': filepath
, 'Filesize': downloadsize
, 'FilesizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': None, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
3258 if(outfile
=="-" and sys
.version
[0]=="2"):
3259 pretmpfilename
= download_from_url_file_with_sftp(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
3260 if(not pretmpfilename
):
3262 tmpfilename
= pretmpfilename
['Filename'];
3263 downloadsize
= os
.path
.getsize(tmpfilename
);
3266 exec_time_start
= time
.time();
3267 with
open(tmpfilename
, 'rb') as ft
:
3270 databytes
= ft
.read(buffersize
[1]);
3271 if not databytes
: break;
3272 datasize
= len(databytes
);
3273 fulldatasize
= datasize
+ fulldatasize
;
3276 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
3277 downloaddiff
= fulldatasize
- prevdownsize
;
3278 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
3279 prevdownsize
= fulldatasize
;
3282 fdata
= f
.getvalue();
3285 os
.remove(tmpfilename
);
3286 exec_time_end
= time
.time();
3287 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
3288 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': None, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
3289 if(outfile
=="-" and sys
.version
[0]>="3"):
3290 pretmpfilename
= download_from_url_file_with_sftp(httpurl
, httpheaders
, httpcookie
, httpmethod
, postdata
, buffersize
[0], sleep
);
3291 tmpfilename
= pretmpfilename
['Filename'];
3292 downloadsize
= os
.path
.getsize(tmpfilename
);
3295 exec_time_start
= time
.time();
3296 with
open(tmpfilename
, 'rb') as ft
:
3299 databytes
= ft
.read(buffersize
[1]);
3300 if not databytes
: break;
3301 datasize
= len(databytes
);
3302 fulldatasize
= datasize
+ fulldatasize
;
3305 percentage
= str("{0:.2f}".format(float(float(fulldatasize
/ downloadsize
) * 100))).rstrip('0').rstrip('.')+"%";
3306 downloaddiff
= fulldatasize
- prevdownsize
;
3307 log
.info("Copying "+get_readable_size(fulldatasize
, 2, "SI")['ReadableWithSuffix']+" / "+get_readable_size(downloadsize
, 2, "SI")['ReadableWithSuffix']+" "+str(percentage
)+" / Copied "+get_readable_size(downloaddiff
, 2, "IEC")['ReadableWithSuffix']);
3308 prevdownsize
= fulldatasize
;
3311 fdata
= f
.getvalue();
3314 os
.remove(tmpfilename
);
3315 exec_time_end
= time
.time();
3316 log
.info("It took "+hms_string(exec_time_start
- exec_time_end
)+" to copy file.");
3317 returnval
= {'Type': "Content", 'Content': fdata
, 'Contentsize': downloadsize
, 'ContentsizeAlt': {'IEC': get_readable_size(downloadsize
, 2, "IEC"), 'SI': get_readable_size(downloadsize
, 2, "SI")}, 'DownloadTime': pretmpfilename
['DownloadTime'], 'DownloadTimeReadable': pretmpfilename
['DownloadTimeReadable'], 'MoveFileTime': float(exec_time_start
- exec_time_end
), 'MoveFileTimeReadable': hms_string(exec_time_start
- exec_time_end
), 'Headers': pretmpfilename
['Headers'], 'Version': pretmpfilename
['Version'], 'Method': pretmpfilename
['Method'], 'Method': None, 'HeadersSent': pretmpfilename
['HeadersSent'], 'URL': pretmpfilename
['URL'], 'Code': pretmpfilename
['Code']};
3320 if(not haveparamiko
):
3321 def download_from_url_to_file_with_sftp(httpurl
, httpheaders
=geturls_headers
, httpcookie
=geturls_cj
, httpmethod
="GET", postdata
=None, outfile
="-", outpath
=os
.getcwd(), buffersize
=[524288, 524288], sleep
=-1):
3325 def upload_file_to_sftp_file(sftpfile
, url
):
3326 urlparts
= urlparse
.urlparse(url
);
3327 file_name
= os
.path
.basename(urlparts
.path
);
3328 file_dir
= os
.path
.dirname(urlparts
.path
);
3329 sftp_port
= urlparts
.port
;
3330 if(urlparts
.scheme
=="http" or urlparts
.scheme
=="https"):
3332 if(urlparts
.port
is None):
3335 sftp_port
= urlparts
.port
;
3336 if(urlparts
.username
is not None):
3337 sftp_username
= urlparts
.username
;
3339 sftp_username
= "anonymous";
3340 if(urlparts
.password
is not None):
3341 sftp_password
= urlparts
.password
;
3342 elif(urlparts
.password
is None and urlparts
.username
=="anonymous"):
3343 sftp_password
= "anonymous";
3346 if(urlparts
.scheme
!="sftp"):
3348 ssh
= paramiko
.SSHClient();
3349 ssh
.load_system_host_keys();
3350 ssh
.set_missing_host_key_policy(paramiko
.AutoAddPolicy());
3352 ssh
.connect(urlparts
.hostname
, port
=sftp_port
, username
=urlparts
.username
, password
=urlparts
.password
);
3353 except paramiko
.ssh_exception
.SSHException
:
3355 except socket
.gaierror
:
3356 log
.info("Error With URL "+httpurl
);
3358 except socket
.timeout
:
3359 log
.info("Error With URL "+httpurl
);
3361 sftp
= ssh
.open_sftp();
3362 sftp
.putfo(sftpfile
, urlparts
.path
);
3365 sftpfile
.seek(0, 0);
3368 def upload_file_to_sftp_file(sftpfile
, url
):
3372 def upload_file_to_sftp_string(sftpstring
, url
):
3373 sftpfileo
= BytesIO(sftpstring
);
3374 sftpfile
= upload_file_to_sftp_files(ftpfileo
, url
);
3378 def upload_file_to_sftp_string(url
):