views:

56

answers:

2

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?

+3  A: 

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 it. But if the service you access has an XML api, this API surely includes auth too.

leoluk
Thanks! This was perfect!
froadie
A: 

You may want a library to abstract out some of the details. I've used restkit to great effect before. It handles HTTP auth.

Daenyth