[vk] Workaround buggy new.vk.com Set-Cookie headers

This commit is contained in:
Sergey M․ 2016-06-23 04:17:13 +07:00
parent 089657ed1f
commit 75ca6bcee2
No known key found for this signature in database
GPG key ID: 2C393E0F18A9236D

View file

@ -3,6 +3,7 @@
import re
import json
import sys
from .common import InfoExtractor
from ..compat import compat_str
@ -190,7 +191,7 @@ def _login(self):
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 @@ def _login(self):
'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))