2009-10-09 10 views
5

Est-ce que quelqu'un a un exemple simple d'envoyer une requête POST XML à une API RESTful avec Python? J'essaie d'utiliser la bibliothèque urllib2 Python pour "créer un nouveau projet" dans l'API Harvest, sans aucune chance. La variable de la charge utile est un document XML valide qui est un proche de copier/coller de leur documentation (sous la Créer un nouveau titre du projet) montré ici:XML POST REST Demande utilisant Python

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

Voici le code que je suis en train d'exécuter.

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 

Je reçois un code de réponse 200 (état OK) au lieu d'un code de réponse 201 (créé) ... est-ce une question pour les gars de soutien récolte?

Toute indication que quelqu'un a serait grandement appréciée.

Merci, Jeff.

Répondre

1

Il est courant de renvoyer une réponse 200 même lorsqu'une réponse 201 serait plus appropriée. Êtes-vous sûr que la demande n'est pas correctement traitée même si vous obtenez une réponse «correcte»?

1

Vous utilisez un ouvreur local partout sauf sur la ligne où vous créez la réponse, où vous utilisez self.opener, qui ressemble au problème.

Questions connexes