python - authenticated - ¿Cómo usar el método POST en Tornado?
tornado web authenticated (1)
parece que las personas crean sus propios parámetros
No exactamente. De los documentos:
buscar (solicitud, ** kwargs)
Ejecuta una solicitud y devuelve una HTTPResponse.
La solicitud puede ser una cadena URL o un objeto HTTPRequest. Si es una cadena, construimos una HTTPRequest usando cualquier kwargs adicional: HTTPRequest (request, ** kwargs)
( Enlace )
Entonces los kwargs son en realidad de este método .
De todos modos, a la verdadera causa del problema: ¿cómo se envían los datos POST? Estabas en el camino correcto, pero necesitas codificar en la URL tus datos POST y usarlos como tu cuerpo kwarg. Me gusta esto:
import urllib
post_data = { ''data'': ''test data'' } #A dictionary of your post data
body = urllib.urlencode(post_data) #Make it into a post request
http_client.fetch("http://0.0.0.0:8888", handle_request, method=''POST'', headers=None, body=body) #Send it off!
Entonces para obtener los datos:
data = self.get_argument(''data'', ''No data received'')
Intento utilizar Tornado para iniciar un servidor y publicar una cadena en él. He encontrado muchos ejemplos de cómo escribir el método de publicación en la clase de controlador, pero no hay ejemplos de cómo escribir la solicitud de publicación. Mi código actual hace que se ejecute el método de publicación, pero get_argument no obtiene los datos, solo imprime el valor predeterminado "Sin datos recibidos" cada vez. ¿Qué estoy haciendo mal?
Mi código se ve así:
class MainHandler(tornado.web.RequestHandler):
def post(self):
data = self.get_argument(''body'', ''No data received'')
self.write(data)
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
def handle_request(response):
if response.error:
print "Error:", response.error
else:
print response.body
tornado.ioloop.IOLoop.instance().stop()
application.listen(8888)
test = "test data"
http_client = tornado.httpclient.AsyncHTTPClient()
http_client.fetch("http://0.0.0.0:8888", handle_request, method=''POST'', headers=None, body=test)
tornado.ioloop.IOLoop.instance().start()
¿Es lo correcto hacer la cadena que quiero enviar en el parámetro "cuerpo"? En algunos ejemplos que he visto, como aquí , parece que las personas crean sus propios parámetros, pero si trato de agregar un nuevo parámetro a la solicitud, como
http_client.fetch("http://0.0.0.0:8888", handle_request, method=''POST'', headers=None, data=test)
Acabo de recibir un error que dice "TypeError: init () obtuvo un argumento de palabra clave inesperado ''data''"
¡Gracias!