2009-10-09 37 views
5

¿Alguien tiene un ejemplo simple de enviar una solicitud XML POST a una API RESTful con Python? Estoy tratando de usar la biblioteca de urllib2 Python para "crear un nuevo proyecto" en la API de Harvest, sin suerte. La variable de carga útil es un documento XML válido que es una copia cerca/pegar de su documentación (bajo la rúbrica Crear nuevo proyecto) que se muestra aquí:XML POST REST Request using Python

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

Aquí está el código que estoy tratando de ejecutar.

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 

he recibido un código de respuesta 200 (OK Status) en lugar de un código de respuesta 201 (creados) ... Es esta una pregunta para los chicos soporte a la cosecha?

Cualquier sugerencia que alguien tenga sería muy apreciada.

Gracias, Jeff.

Respuesta

1

Es común devolver una respuesta de 200 incluso cuando una respuesta 201 sea estrictamente más apropiada. ¿Estás seguro de que la solicitud no se procesa correctamente, incluso si recibes una respuesta "correcta"?

1

Está utilizando un abridor local en todas partes excepto en la línea donde crea la respuesta, donde usa self.opener, que se ve como el problema.