python: нельзя использовать urlopen!! из urllib, urllib2, ошибка clientcookie urlopen ssl

Я сделал некоторый код для доступа к конкретному сайту вместо пользователя. Это очень похоже на программу автоматического входа в систему. Моя программа получает идентификатор пользователя и пароль от пользователя и пытается получить доступ к URL-адресу с данными и логином, возвращает результат входа в систему.

Вот код.

from urllib import urlencode
from urllib2 import Request
from ClientCookie import urlopen, install_opener, build_opener

httpheaders = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1;)'}
y_url1 = 'http://www.xxx.kr/papp.jsp'
y_url2 = 'https://im.xxx.kr/sso/auth'

def check_valid_user(user_id, user_pw):
    values = {'ssousername': user_id, 'password': user_pw}
    data = urlencode(values)
    req = Request(y_url1, data, httpheaders)
    response = urlopen(req)
    the_page = response.read()
    token = the_page.split('"site2pstoretoken"')[1].split('"')[1]
    values = {'ssousername': user_id, 'password': user_pw, 'site2pstoretoken' : token}
    data = urlencode(values)
    req = Request(y_url2, data, httpheaders)
    response = urlopen(req)
    the_page = response.read()
    install_opener(build_opener())
    if the_page.find('Cyber') == -1:
        return False
    else:
        return True

Когда я запускаю эту программу на своем рабочем столе Windows, она работает хорошо.

Но когда я запускаю эту программу на своем сервере Ubuntu Apache, она не работает. (убунту 11.04, питон 2.7.1)

Я открываю оболочку django python и пытаюсь отладить построчную оболочку python manage.py

response = urlopen(req)

В этот момент возникает ошибка.

>>>response = urlopen(req)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/ClientCookie/_urllib2_support.py", line 824, in urlopen
    return _opener.open(url, data)
  File "/usr/lib/python2.7/urllib2.py", line 397, in open
response = meth(req, response)
  File "/usr/lib/python2.7/dist-packages/ClientCookie/_urllib2_support.py", line 626, in http_response
"http", request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 429, in error
result = self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 369, in _call_chain
result = func(*args)
  File "/usr/lib/python2.7/dist-packages/ClientCookie/_urllib2_support.py", line 154, in http_error_302
return self.parent.open(new)
  File "/usr/lib/python2.7/urllib2.py", line 391, in open
response = self._open(req, data)
  File "/usr/lib/python2.7/urllib2.py", line 409, in _open
'_open', req)
  File "/usr/lib/python2.7/urllib2.py", line 369, in _call_chain
result = func(*args)
  File "/usr/lib/python2.7/dist-packages/ClientCookie/_urllib2_support.py", line 724, in https_open
return self.do_open(httplib.HTTPSConnection, req)
  File "/usr/lib/python2.7/dist-packages/ClientCookie/_urllib2_support.py", line 694, in do_open
raise URLError(err)
URLError: <urlopen error [Errno 1] _ssl.c:499: error:14077417:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert illegal parameter>

В чем проблема? Помогите пожалуйста мне.....


person Caesar Mn    schedule 13.08.2012    source источник


Ответы (3)


ознакомьтесь с этим отчетом об ошибке ошибка urllib

кажется, что-то вроде ниже может исправить это.

 import ssl
 https_sslv3_handler = urllib.request.HTTPSHandler(context=ssl.SSLContext(ssl.PROTOCOL_SSLv3))
 opener = urllib.request.build_opener(https_sslv3_handler)
 urllib.request.install_opener(opener)
person olly_uk    schedule 13.08.2012
comment
Я сделал собственный HTTPSHandler и использую install_opener. Ошибка SSL исчезла. но urlopen вызывает AttributeError: объект «NoneType» не имеет атрибута «sendall»....... - person Caesar Mn; 14.08.2012

Я бы использовал запросы вместо urllib. Синтаксис намного чище:

r = requests.get('https://your-url', auth=('user', 'pass'))

вы также можете добавить заголовки:

headers = {'content-type': 'application/json'}
r = requests.get('https://your-url', auth=('user', 'pass'), headers=headers)
person Jose A. Martín    schedule 13.08.2012
comment
Я просто пытаюсь использовать модуль запросов, но он также вызывает ошибку SSL ... Я думаю, дело в том, что ошибка возникает только на сервере Ubuntu. хорошо работает на моем настольном компьютере. - person Caesar Mn; 14.08.2012

Ваш сервер, вероятно, не поддерживает SSLv2, который Python ssl использует по умолчанию.

Взгляните на решение, которое я разместил здесь, и посмотрите, поможет ли оно вам: https://stackoverflow.com/a/24175862/41957< /а>

person chnrxn    schedule 08.10.2014