Использование POST и urllib2 для доступа к веб-API

Я пытаюсь получить доступ к веб-API с помощью метода POST. Я могу получить к нему доступ, используя метод GET, но владельцы API говорят мне, что определенные функции работают только с POST. К сожалению, я не могу заставить работать POST.

Вот что работает с GET:

API_URL = "http://example.com/api/"

def call_api(method, **kwargs):
    url = API_URL + method
    if kwargs:
        url += '?' + urllib.urlencode(kwargs)
    req = urllib2.Request(url)
    auth = 'Basic ' + base64.urlsafe_b64encode("%s:%s" % (USER, PASS))
    req.add_header('Authorization', auth)
    return urllib2.urlopen(req)

Вот что НЕ работает с POST (вызывает ошибку HTTP 400):

API_URL = "http://example.com/api/"

def call_api(method, **kwargs):
    url = API_URL + method
    data=''
    if kwargs:
        data=urllib.urlencode(kwargs)
    req = urllib2.Request(url, data)
    auth = 'Basic ' + base64.urlsafe_b64encode("%s:%s" % (USER, PASS))
    req.add_header('Authorization', auth)
    return urllib2.urlopen(req)

Что-нибудь выскакивает у кого-то как изначально неправильное в коде POST? Я' я никогда раньше не выполнял POST-вызовы, но все, что я прочитал, наводит на мысль о разумности моего кода. Есть ли другой способ, которым я должен использовать add_header для авторизации, если я использую POST?

6
задан neomech 16 November 2010 в 15:30
поделиться