Запрос XML POST REST с использованием Python

У кого-нибудь есть простой пример отправки XML-запроса POST в RESTful API с помощью Python? Я пытаюсь использовать библиотеку Python urllib2 для «создания нового проекта» в Harvest API, но безуспешно. Переменная полезной нагрузки — это допустимый XML-документ, который является почти копией/вставкой их документации (под заголовком «Создать новый проект»), показанной здесь:

http://www.getharvest.com/api/projects

Вот код, который я пытаюсь выполнить.

def postRequest():
    """ Makes POST request to url, and returns a response. """
    url = 'http://subdomain.harvestapp.com/projects'

    opener = urllib2.build_opener()
    opener.addheaders = [('Accept', 'application/xml'),
                        ('Content-Type', 'application/xml'),
                        ('Authorization', 'Basic %s' % base64.encodestring('%s:%s' % (self.username, self.password))[:-1]), 
                        ('User-Agent', 'Python-urllib/2.6')]

    req = urllib2.Request(url=url, data=payload)
    assert req.get_method() == 'POST'
    response = self.opener.open(req)
    print response.code

    return response

Я получаю код ответа 200 (Статус ОК) вместо кода ответа 201 (Создано)... это вопрос к ребятам из службы поддержки урожая?

Любые подсказки, которые есть у кого-либо, будут очень признательны.

Спасибо, Джефф.


person Jeff Kwiat    schedule 09.10.2009    source источник


Ответы (2)


Обычно возвращается ответ 200, даже если ответ 201 был бы более подходящим. Вы уверены, что запрос обрабатывается неправильно, даже если вы получаете «правильный» ответ?

person Andrew Wilkinson    schedule 09.10.2009

Вы используете локальный открыватель везде, кроме строки, где вы создаете ответ, где вы используете self.opener, что выглядит как проблема.

person Hugo    schedule 15.04.2011