Как добавить базовую аутентификацию в запрос Python REST? - PullRequest
5 голосов
/ 13 сентября 2010

У меня есть следующий простой код Python, который выполняет простой пост-запрос к службе REST -

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

Проблема состоит в том, что URL, используемый для вызова службы REST, теперь будет требовать базовой аутентификациипароль).Как я могу включить имя пользователя и пароль / базовую аутентификацию в этот код настолько просто, насколько это возможно?

Ответы [ 2 ]

7 голосов
/ 13 сентября 2010

Если базовая аутентификация = HTTP-аутентификация, используйте это:

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)

Если нет, используйте mechanize или cookielib, чтобы сделать дополнительный запрос на вход в систему. Но если служба, к которой вы обращаетесь, имеетXML API, этот API, безусловно, также включает в себя аутентификацию.

2016 edit: В любом случае используйте библиотеку запросы !Все вышеперечисленное обеспечивается одним вызовом.

1 голос
/ 14 сентября 2010

Вы можете захотеть, чтобы библиотека абстрагировалась от некоторых деталей. Я использовал restkit для отличного эффекта. Он обрабатывает HTTP-аутентификацию.

...