Ogólny serwer HTTP, który po prostu zrzuca żądania POST?


24

Szukam narzędzia wiersza polecenia, które nasłuchuje na danej części, na szczęście z wyjątkiem każdego żądania HTTP POST i zrzuca je.

Chcę go używać do celów testowych, tj. Do testowania klientów, którzy wysyłają żądania HTTP POST.

Oznacza to, że szukam odpowiednika curl -F(którego mogę użyć do wysłania testowych testów POST HTTP na serwer HTTP).

Być może coś takiego socat TCP4-LISTEN:80,fork,bind=127.0.0.1 ...- ale socat to za mało, ponieważ nie mówi HTTP.


1
Może nie rozumiem poprawnie pytania, ale jeśli wszystko, czego potrzebujesz, to zrzucić żądanie POST, możesz użyć netcat( ncw niektórych systemach) z opcjami -l(nasłuchuj) i -p(numer portu).
peterph

1
@peterph, możesz użyć ncdo częściowego testowania - ale widzę następujące wady: 1) nie wysyła kodu stanu HTTP 2) muszę nacisnąć Ctrl + D po tym, jak widzę prośbę o zamknięcie połączenia 3) nie wie jak zareagować na nagłówek „Oczekuj: 100-kontynuuj” 4) nie wie, jak obsługiwać nagłówek „Transfer-Kodowanie:
podzielony na

Podobne pytanie o stackoverflow: stackoverflow.com/questions/5725430/...
maxschlepzig

Odpowiedzi:


16

Proste podstawowe narzędzia wiersza poleceń, takie jak nc, socatwydają się nie być w stanie obsłużyć określonych rzeczy HTTP (fragmenty, kodowanie przesyłania itp.). W rezultacie może to spowodować nieoczekiwane zachowanie w porównaniu do rozmowy z prawdziwym serwerem internetowym. Tak więc, moją pierwszą myślą jest udostępnienie najszybszego znanego mi sposobu skonfigurowania małego serwera WWW i zrobienia tego, co chcesz: zrzuć wszystkie dane wyjściowe.

Najkrótszy, jaki mogłem wymyślić używając 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()

Zamień pprintwiersz, aby wyświetlać tylko te pola, których potrzebujesz, na przykład self.request.bodylub self.request.headers. W powyższym przykładzie nasłuchuje na porcie 8080 na wszystkich interfejsach.

Istnieje wiele alternatyw. web.py , butelka itp.

(Przepraszam, jestem dość zorientowany na Pythona)


Jeśli nie podoba ci się sposób wyświetlania, po prostu uruchom go mimo to i spróbuj tcpdump:

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

aby zobaczyć prawdziwy zrzut wszystkich żądań HTTP-POST. Możesz też uruchomić Wireshark.


1
Dla innych, którzy uważają ten bardzo pomocny fragment - robi to, o co go poproszono - ale jeśli chcesz zobaczyć treść testu POST, jest to pprint.pprint(self.request.body). Uwaga self.request.bodyzamiast self.body. To samo dotyczy self.request.headers. Zobacz tornado.readthedocs.org/en/latest/...
mozz100

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.