aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey M․ <dstftw@gmail.com>2016-06-23 04:17:13 +0700
committerSergey M․ <dstftw@gmail.com>2016-06-23 04:17:13 +0700
commit75ca6bcee2466cb9ca3dc4d1ca35b56a59f6cc4d (patch)
treeec0bb747025781c7903c44149c03a6998cde19ed
parent089657ed1f6edcdb10a958a8cd7d91b4888e41eb (diff)
downloadyoutube-dl-75ca6bcee2466cb9ca3dc4d1ca35b56a59f6cc4d.tar.xz
[vk] Workaround buggy new.vk.com Set-Cookie headers
-rw-r--r--youtube_dl/extractor/vk.py19
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))