return unescapeHTML(res)
+def extract_attributes(attributes_str, attributes_regex=r'(?s)\s*([^\s=]+)\s*=\s*["\']([^"\']+)["\']'):
+ attributes = re.findall(attributes_regex, attributes_str)
+ attributes_dict = {}
+ if attributes:
+ for (attribute_name, attribute_value) in attributes:
+ attributes_dict[attribute_name] = attribute_value
+ return attributes_dict
+
+
def clean_html(html):
"""Clean an HTML snippet into a readable string"""
# https://github.com/rg3/youtube-dl/issues/6769).
# In order to at least prevent crashing we will percent encode Set-Cookie
# header before HTTPCookieProcessor starts processing it.
- if sys.version_info < (3, 0) and response.headers:
- for set_cookie_header in ('Set-Cookie', 'Set-Cookie2'):
- set_cookie = response.headers.get(set_cookie_header)
- if set_cookie:
- set_cookie_escaped = '; '.join([
- escape_rfc3986(cookie_attr.strip())
- for cookie_attr in set_cookie.decode('iso-8859-1').split(';')]).encode('iso-8859-1')
- if set_cookie != set_cookie_escaped:
- del response.headers[set_cookie_header]
- response.headers[set_cookie_header] = set_cookie_escaped
+ # if sys.version_info < (3, 0) and response.headers:
+ # for set_cookie_header in ('Set-Cookie', 'Set-Cookie2'):
+ # set_cookie = response.headers.get(set_cookie_header)
+ # if set_cookie:
+ # set_cookie_escaped = compat_urllib_parse.quote(set_cookie, b"%/;:@&=+$,!~*'()?#[] ")
+ # if set_cookie != set_cookie_escaped:
+ # del response.headers[set_cookie_header]
+ # response.headers[set_cookie_header] = set_cookie_escaped
return compat_urllib_request.HTTPCookieProcessor.http_response(self, request, response)
https_request = compat_urllib_request.HTTPCookieProcessor.http_request
return compat_urllib_parse.urlencode(*args, **kargs).encode('ascii')
+def encode_dict(d, encoding='utf-8'):
+ return dict((k.encode(encoding), v.encode(encoding)) for k, v in d.items())
+
+
try:
etree_iter = xml.etree.ElementTree.Element.iter
except AttributeError: # Python <=2.6