XML POST REST-запрос с использованием Python - PullRequest
5 голосов
/ 10 октября 2009

У кого-нибудь есть простой пример отправки запроса XML POST в API RESTful с Python? Я пытаюсь использовать библиотеку Python urllib2 для «создания нового проекта» в API Harvest, но безуспешно. Переменная полезной нагрузки является действительным 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 (Создан) ... Это вопрос для парней из службы поддержки уборки урожая?

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

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

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

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

1 голос
/ 10 октября 2009

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

...