Estoy buscando una herramienta de línea de comandos que escuche en una parte determinada, felizmente exceptúa cada solicitud HTTP POST y la volca.
Quiero usarlo con fines de prueba, es decir, para probar clientes que emiten solicitudes HTTP POST.
Eso significa que estoy buscando la contraparte de curl -F
(que puedo usar para enviar POST HTTP de prueba a un servidor HTTP).
Quizás algo así socat TCP4-LISTEN:80,fork,bind=127.0.0.1 ...
, pero socat no es suficiente porque no habla HTTP.
http
http-logging
maxschlepzig
fuente
fuente
netcat
(nc
en algunos sistemas) con las opciones-l
(escuchar) y-p
(número de puerto).nc
para pruebas parciales, pero puedo ver las siguientes desventajas: 1) no envía el código de estado HTTP 2) Tengo que presionar Ctrl + D después de ver la solicitud para cerrar la conexión 3) no sabe cómo reaccionar ante el encabezado 'Esperar: 100-continuar' 4) no sabe cómo manejar el encabezado 'Transferencia-Codificación: fragmentado' - probablemente solo muestra el primer (probablemente) fragmento vacíoRespuestas:
Las herramientas de línea de comandos básicas simples como
nc
,socat
parecen no ser capaces de manejar las cosas HTTP específicas que están sucediendo (fragmentos, codificaciones de transferencia, etc.). Como resultado, esto puede producir un comportamiento inesperado en comparación con hablar con un servidor web real. Entonces, mi primer pensamiento es compartir la forma más rápida que conozco de configurar un pequeño servidor web y hacer que simplemente haga lo que quiera: volcar toda la salida.Lo más corto que se me ocurrió usar Python Tornado :
Reemplace la
pprint
línea para generar solo los campos específicos que necesita, por ejemploself.request.body
oself.request.headers
. En el ejemplo anterior, escucha en el puerto 8080, en todas las interfaces.Las alternativas a esto son muchas. web.py , botella , etc.
(Estoy bastante orientado a Python, lo siento)
Si no le gusta su forma de salida, simplemente ejecútelo de todos modos e intente
tcpdump
así:para ver un volcado sin procesar real de todas las solicitudes HTTP-POST. Alternativamente, solo ejecuta Wireshark.
fuente
pprint.pprint(self.request.body)
. Nota enself.request.body
lugar deself.body
. Lo mismo paraself.request.headers
. Ver tornado.readthedocs.org/en/latest/…Yo también estaba buscando esto y me encontré con el servidor http-echo-Node.js :
Acepta todas las solicitudes y hace eco de la solicitud completa, incluido el encabezado de la línea de comandos.
fuente