estoy en el proceso de escritura de una prueba de concepto de servidor REST utilizando web.pyPrueba de concepto de servidor REST Python (usando web.py) + pruebas con el enrollamiento de
Aquí está la secuencia de comandos:
#!/usr/bin/env python
import web
import json
def notfound():
#return web.notfound("Sorry, the page you were looking for was not found.")
return json.dumps({'ok':0, 'errcode': 404})
def internalerror():
#return web.internalerror("Bad, bad server. No donut for you.")
return json.dumps({'ok':0, 'errcode': 500})
urls = (
'/(.*)', 'handleRequest',
)
app = web.application(urls, globals())
app.notfound = notfound
app.internalerror = internalerror
class handleRequest:
def GET(self, method_id):
if not method_id:
return web.notfound()
else:
return json.dumps({'ok': method_id})
def POST(self):
i = web.input()
data = web.data() # you can get data use this method
print data
pass
if __name__ == "__main__":
app.run()
Puedo enviar solicitudes GET de forma correcta, sin embargo, cuando intento enviar una solicitud POST, aparece un error interno. Por el momento, no estoy seguro de si el error se debe a que cURL no envió el POST correctamente (muy poco probable), o si mi servidor no se implementó correctamente (más probable).
Este es el comando que utilizo para enviar la solicitud POST:
curl -i -H "Accept: application/json" -X POST -d "value":"30","type":"Tip 3","targetModule":"Target 3","active":true http://localhost:8080/xx/xxx/xxxx
Aquí está la respuesta del servidor:
[email protected]:~curl -i -H "Accept: application/json" -X POST -d "value":"30","type":"Tip 3","targetModule":"Target 3","active":true http://localhost:8080/xx/xxx/xxxx
HTTP/1.1 500 Internal Server Error
Content-Length: 1382
Content-Type: text/plain
Traceback (most recent call last):
File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/wsgiserver/__init__.py", line 1245, in communicate
req.respond()
File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/wsgiserver/__init__.py", line 775, in respond
self.server.gateway(self).respond()
File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/wsgiserver/__init__.py", line 2018, in respond
response = self.req.server.wsgi_app(self.env, self.start_response)
File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/httpserver.py", line 270, in __call__
return self.app(environ, xstart_response)
File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/httpserver.py", line 238, in __call__
return self.app(environ, start_response)
File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/application.py", line 277, in wsgi
result = self.handle_with_processors()
File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/application.py", line 247, in handle_with_processors
return process(self.processors)
File "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/application.py", line 244, in process
raise self.internalerror()
TypeError: exceptions must be old-style classes or derived from BaseException, not str
¿Cuál es la causa del error - y cómo puedo solucionarlo ?
El mensaje es bastante claro sobre la causa. Nombra el archivo y el número de línea. Archivo "/usr/local/lib/python2.6/dist-packages/web.py-0.36-py2.6.egg/web/application.py", línea 244. Es un error en el código que no ha escrito. Debe hablar con la gente que mantiene web.py. Nosotros no. –
También. ¿Por qué no hay 'retorno' en el método POST? –
Creo que deberías devolver 'web.notfound (json.dumps ({'ok': 0, 'errcode': 404}))' en tu función no encontrada. Se requiere un cambio similar para la función 'internalerror'. –