diff options
| author | Sergey M․ <dstftw@gmail.com> | 2016-06-23 04:17:13 +0700 | 
|---|---|---|
| committer | Sergey M․ <dstftw@gmail.com> | 2016-06-23 04:17:13 +0700 | 
| commit | 75ca6bcee2466cb9ca3dc4d1ca35b56a59f6cc4d (patch) | |
| tree | ec0bb747025781c7903c44149c03a6998cde19ed | |
| parent | 089657ed1f6edcdb10a958a8cd7d91b4888e41eb (diff) | |
[vk] Workaround buggy new.vk.com Set-Cookie headers
| -rw-r--r-- | youtube_dl/extractor/vk.py | 19 | 
1 files changed, 18 insertions, 1 deletions
diff --git a/youtube_dl/extractor/vk.py b/youtube_dl/extractor/vk.py index 79c819bc3..4e8ec0f86 100644 --- a/youtube_dl/extractor/vk.py +++ b/youtube_dl/extractor/vk.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals  import re  import json +import sys  from .common import InfoExtractor  from ..compat import compat_str @@ -190,7 +191,7 @@ class VKIE(InfoExtractor):          if username is None:              return -        login_page = self._download_webpage( +        login_page, url_handle = self._download_webpage_handle(              'https://vk.com', None, 'Downloading login page')          login_form = self._hidden_inputs(login_page) @@ -200,6 +201,22 @@ class VKIE(InfoExtractor):              'pass': password.encode('cp1251'),          }) +        # https://new.vk.com/ serves two same remixlhk cookies in Set-Cookie header +        # and expects the first one to be set rather than second (see +        # https://github.com/rg3/youtube-dl/issues/9841#issuecomment-227871201). +        # As of RFC6265 the newer one cookie should be set into cookie store +        # what actually happens. +        # We will workaround this VK issue by resetting the remixlhk cookie to +        # the first one manually. +        cookies = url_handle.headers.get('Set-Cookie') +        if sys.version_info[0] >= 3: +            cookies = cookies.encode('iso-8859-1') +        cookies = cookies.decode('utf-8') +        remixlhk = re.search(r'remixlhk=(.+?);.*?\bdomain=(.+?)(?:[,;]|$)', cookies) +        if remixlhk: +            value, domain = remixlhk.groups() +            self._set_cookie(domain, 'remixlhk', value) +          request = sanitized_Request(              'https://login.vk.com/?act=login',              urlencode_postdata(login_form))  | 
