Servidor HTTP genérico que apenas despeja solicitações POST?

21

Eu estou procurando uma ferramenta de linha de comando que ouve em uma determinada parte, felizmente excede todas as solicitações HTTP POST e despeja-as.

Eu quero usá-lo para fins de teste, ou seja, para testar clientes que emitem solicitações HTTP POST.

Isso significa que estou pesquisando a contraparte do curl -F (que eu posso usar para enviar testes HTTP POSTs para um servidor HTTP).

Talvez algo como socat TCP4-LISTEN:80,fork,bind=127.0.0.1 ... - mas socat não seja suficiente porque não fala HTTP.

    
por maxschlepzig 08.12.2012 / 00:24

2 respostas

16

As ferramentas de linha de comando do núcleo simples, como nc , socat , parecem não ser capazes de manipular as coisas HTTP específicas em andamento (trechos, codificações de transferência, etc.). Como resultado, isso pode produzir um comportamento inesperado comparado a falar com um servidor da Web real. Então, meu primeiro pensamento é compartilhar a maneira mais rápida que eu conheço de configurar um minúsculo servidor web e fazê-lo apenas fazer o que você quer: descarregar toda a saída.

O menor que eu poderia usar usando o Python Tornado :

#!/usr/bin/env python

import tornado.ioloop
import tornado.web
import pprint

class MyDumpHandler(tornado.web.RequestHandler):
    def post(self):
        pprint.pprint(self.request)
        pprint.pprint(self.request.body)

if __name__ == "__main__":
    tornado.web.Application([(r"/.*", MyDumpHandler),]).listen(8080)
    tornado.ioloop.IOLoop.instance().start()

Substitua a linha pprint para gerar apenas os campos específicos necessários, por exemplo, self.request.body ou self.request.headers . No exemplo acima, ele escuta na porta 8080, em todas as interfaces.

Alternativas para isso são muitas. web.py , Frasco , etc.

(sou bastante orientada para Python, desculpe)

Se você não gosta de sua maneira de produzir, apenas execute-o mesmo assim e tente tcpdump da seguinte forma:

tcpdump -i lo 'tcp[32:4] = 0x484f535420'

para ver um despejo bruto real de todas as solicitações HTTP-POST. Como alternativa, basta executar o Wireshark.

    
por 08.12.2012 / 00:54
35

Eu também estava procurando por isso e encontrei o http-echo-server do Node.js :

npm install http-echo-server -g
PORT=8081 http-echo-server

Aceita todos os pedidos e ecoa o pedido completo incluindo cabeçalho na linha de comando.

    
por 22.07.2015 / 15:02