2015-02-18 3 views
0

Я пытаюсь добавить sssl.SSlContext к urlopen методы, но получаю ошибку:не URLLIB принимает контекст в качестве параметра

TypeError: urlopen() got an unexpected keyword argument 'context' 

Я использую Python 3 и URLLIB. У этого параметра есть параметр контекста - https://docs.python.org/2/library/urllib.html. Поэтому я не понимаю, почему это порождает ошибку. Но в любом случае это код:

try: 
    # For Python 3.0 and later 
    from urllib.request import urlopen, Request 
except ImportError: 
    # Fall back to Python 2's urllib2 
    from urllib2 import urlopen, Request 
request = Request(url, content, headers) 
request.get_method = lambda: method 

if sys.version_info[0] == 2 and sys.version_info[1] < 8: 
    result = urlopen(request) 
else: 
    gcontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1) 
    result = urlopen(request, context=gcontext) 

Может кто-нибудь объяснить, что я делаю неправильно?

ответ

3

По urllib.request.urlopen documentation:

Changed in version 3.4.3: context was added.

параметр context будет добавлен в Python 3.4.3. Вам нужно отступить для более низкой версии.


В Python 2.x он добавлен в Python 2.7.9. (urllib.urlopen, urllib2.urlopen)

+2

говорится, что ['3.4.3 final: February 22, 2015'] (https://www.python.org/dev/peps/pep-0429/#id2), то есть он еще не выпущен. – jfs

+0

@ J.F.Sebastian, я пропустил, что он еще не выпущен. Спасибо за комментарий. – falsetru

+0

Так есть обходной путь или я просто не могу использовать SSLContext? – Danrex

2

Вы смотрите на неправильные документы. https://docs.python.org/3.0/library/urllib.request.html - это те, которые вы хотите. Вы использовали документацию Python 2.X.

+0

aaahhh, таким образом, я был. Все-таки я могу сделать эту работу вообще или мне придется использовать более старую версию Python? – Danrex

Смежные вопросы