Reputation: 35
I made some code for access particular site instead user. It's very similar to auto login program. My program receive userid and password from user and try access url with data and login, return login result.
Here's code.
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
When I run this program on my windows desktop, it works well.
But when I run this program on my ubuntu apache server, it's not working. (ubuntu 11.04, python 2.7.1)
I open django python shell and try to debug line by line python manage.py shell
response = urlopen(req)
At this point, error raises.
>>>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>
What's the problem? Please help me.....
Upvotes: 0
Views: 3932
Reputation: 1449
Your server probably doesn't support SSLv2, which Python ssl seems to use by default.
Take a look at the solution I posted here and see if it helps you: https://stackoverflow.com/a/24175862/41957
Upvotes: 0
Reputation: 126
I would use requests instead urllib. The syntax is much more clean:
r = requests.get('https://your-url', auth=('user', 'pass'))
you can also add the headers:
headers = {'content-type': 'application/json'}
r = requests.get('https://your-url', auth=('user', 'pass'), headers=headers)
Upvotes: 1
Reputation: 11865
check out this bug report urllib bug
seems something like the below might fix it.
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)
Upvotes: 1