Python - How to tell you are logged in with urllib2

When you visit the site normally, we can use urllib2.Request as such.

import urllib2, base64
req = urllib2.Request("http://www.facebook.com/")
base64string = base64.encodestring("%s:%s" % ("username", "password")).replace("\n", "")
req.add_header("Authorization", "Basic %s" % base64string)
requested = urllib2.urlopen(req)

      

But how do we know if you are logged in or not? Because you could just open the wrong authorization url.

+3


source to share


1 answer


Maybe you should look at request.read () to see what the page you just typed says :) Also look at request.info () for headers sent by the server.

And you have to do it in try: ... except:

order to catch mistakes. See Docs.python.org/2/howto/urllib2.html.

FWIW, the modern approach is to use the query module.

EDIT

Here's an excerpt from some code I wrote a couple of years ago.



import urllib2

def post(url, params):    
    txdata = urllib.urlencode(params)
    try:
        # create a request object
        req = urllib2.Request(url, txdata)

        # and open it to return a handle on the url
        handle = urllib2.urlopen(req)

    except IOError, e:
        print >>sys.stderr, 'We failed to open "%s".' % url
        if hasattr(e, 'code'):
            print >>sys.stderr, 'We failed with error code - %s.' % e.code
        elif hasattr(e, 'reason'):
            print >>sys.stderr, "The error object has the following 'reason' attribute :"
            print >>sys.stderr, e.reason
            print >>sys.stderr, "This usually means the server doesn't exist,"
            print >>sys.stderr, "is down, or we don't have an internet connection."
        #raise SystemExit, 1
        raise
    else:
        print >>sys.stderr, 'Here are the headers of the page :\n%s\n' % handle.info()
        true_url = handle.geturl()
        print >>sys.stderr, "\nTrue URL = '%s'\n" % true_url

        return true_url

      

Hope this gives you some ideas.

EDIT 2

To handle cookies, just do this before creating the request object:

    # build opener with HTTPCookieProcessor
    cookie_handler = urllib2.HTTPCookieProcessor()
    opener = urllib2.build_opener(cookie_handler)
    urllib2.install_opener(opener)

      

+1


source







All Articles