MCPcopy
hub / github.com/pyload/pyload / parseHeader

Method parseHeader

module/network/HTTPChunk.py:260–343  ·  view source on GitHub ↗

parse data from recieved header

(self)

Source from the content-addressed store, hash-verified

258 return None #:All is fine
259
260 def parseHeader(self):
261 """parse data from recieved header"""
262 for orgline in self.header.splitlines():
263 line = orgline.strip().lower()
264 if line.startswith("accept-ranges") and "bytes" in line:
265 self.p.chunkSupport = True
266
267 elif line.startswith("content-disposition"):
268 try:
269 orgline.encode('iso-8859-1')
270 except UnicodeDecodeError:
271 self.log.debug("Content-Disposition: | error: header contains nonstandard characters")
272 else:
273 disposition_value = orgline.split(":", 1)[1].strip()
274 disposition_type, disposition_params = parse_header(disposition_value)
275
276 fname = None
277 if 'filename*' in disposition_params:
278 fname = disposition_params['filename*']
279 m = re.search(r'=\?([^?]+)\?([QB])\?([^?]*)\?=', fname, re.I) #: rfc2047
280 if m is not None:
281 fname, enc = decode_header(fname)[0]
282 try:
283 fname = fname.decode(enc)
284 except LookupError:
285 self.log.warning("Content-Disposition: | error: No decoder found for %s" % enc)
286 fname = None
287 except UnicodeEncodeError:
288 self.log.warning("Content-Disposition: | error: Error when decoding string from %s." % enc)
289 fname = None
290
291 else:
292 m = re.search(r'(.+?)\'(.*)\'(.+)', fname)
293 if m is not None:
294 enc, lang, data = m.groups()
295 try:
296 fname = urllib.unquote(data).decode(enc)
297 except LookupError:
298 self.log.warning("Content-Disposition: | error: No decoder found for %s" % enc)
299 fname = None
300 except UnicodeEncodeError:
301 self.log.warning("Content-Disposition: | error: Error when decoding string from %s." % enc)
302 fname = None
303
304 else:
305 fname = None
306
307 if fname is None:
308 if 'filename' in disposition_params:
309 fname = disposition_params['filename']
310 m = re.search(r'=\?([^?]+)\?([QB])\?([^?]*)\?=', fname, re.I) #: rfc2047
311 if m is not None:
312 fname, enc = decode_header(m.group(0))[0]
313 try:
314 fname = fname.decode(enc)
315 except LookupError:
316 self.log.warning("Content-Disposition: | error: No decoder found for %s" % enc)
317 continue

Callers 1

writeHeaderMethod · 0.95

Calls 7

splitlinesMethod · 0.80
splitMethod · 0.80
decodeMethod · 0.80
updateDispositionMethod · 0.80
encodeMethod · 0.45
searchMethod · 0.45
replaceMethod · 0.45

Tested by

no test coverage detected