How do I add basic authentication to a Python REST request?
Question: I have the following simple Python code that makes a simple post request to a
REST service -

    
    
    params= { "param1" : param1,
              "param2" : param2,
              "param3" : param3 }
    xmlResults = urllib.urlopen(MY_APP_PATH, urllib.urlencode(params)).read()
    results = MyResponseParser.parse(xmlResults)
    

The problem is that the url used to call the REST service will now require
basic authentication (username and password). How can I incorporate a username
and password / basic authentication into this code, as simply as possible?


Answer: If basic authentication = HTTP authentication, use this:

    
    
    import urllib
    import urllib2
    
    username = 'foo'
    password = 'bar'
    
    passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
    passman.add_password(None, MY_APP_PATH, username, password)
    authhandler = urllib2.HTTPBasicAuthHandler(passman)
    opener = urllib2.build_opener(authhandler)
    urllib2.install_opener(opener)
    
    params= { "param1" : param1,
              "param2" : param2,
              "param3" : param3 }
    
    xmlResults = urllib2.urlopen(MY_APP_PATH, urllib.urlencode(params)).read()
    results = MyResponseParser.parse(xmlResults)
    

If not, use `mechanize` or `cookielib` to make an additional request for
logging in. But if the service you access has an XML API, this API surely
includes auth too.

**2016 edit:** By all means, use the [requests](http://docs.python-
requests.org/en/latest/) library! It provides all of the above in a single
call.

