Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Logging into a Coursera account Using Python

I had learned a lot of things from MOOCs so I wanted to return something back to them for this purpose I was thinking of designing a small app in kivy which thus requires python implementation, Actually the thing I wanted to achieve was to log in to my Coursera account via program and collect the information about the courses I am currently pursuing, for this first I have to log in to the coursera( https://accounts.coursera.org/signin?post_redirect=https%3A%2F%2Fwww.coursera.org%2F ), Upon searching the Web I came across this piece of code :

import urllib2, cookielib, urllib

username = "[email protected]"      
password = "uvwxyz"

cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
login_data = urllib.urlencode({'username' : username, 'password' : password})
info = opener.open("https://accounts.coursera.org/signin",login_data)
for line in info:
    print line

and some similar codes as well, but none worked for me, every approach lead to me this type of error:

Traceback (most recent call last):
  File "C:\Python27\Practice\web programming\coursera login.py", line 9, in <module>
    info = opener.open("https://accounts.coursera.org/signin",login_data)
  File "C:\Python27\lib\urllib2.py", line 410, in open
    response = meth(req, response)
  File "C:\Python27\lib\urllib2.py", line 523, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python27\lib\urllib2.py", line 448, in error
    return self._call_chain(*args)
  File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 531, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 404: Not Found

Is the error due to https protocol or there is something that I am missing?

I don't want to use any 3rd party libraries.

like image 961
ZdaR Avatar asked Oct 21 '22 01:10

ZdaR


2 Answers

I'm using requests for this purpose and I think it is a great python library. Here is some example code how it could work:

import requests
from requests.auth import HTTPBasicAuth

credentials = HTTPBasicAuth('username', 'password')
response = requests.get("https://accounts.coursera.org/signin", auth=credentials)
print response.status_code
# if everything was fine then it prints
>>> 200

Here is the link to requests:

http://docs.python-requests.org/en/latest/

like image 139
cezar Avatar answered Oct 22 '22 16:10

cezar


I think you need to use HTTPBasicAuthHandler module of urllib2. Check section 'Basic Authentication'. https://docs.python.org/2/howto/urllib2.html

And I strongly recommend you requests module. It will make your code better. http://docs.python-requests.org/en/latest/

like image 45
Stephen Lin Avatar answered Oct 22 '22 14:10

Stephen Lin