Sadece POST isteklerini bırakan genel HTTP sunucusu?


24

Belirli bir kısmı dinleyen, mutlu bir şekilde her HTTP POST isteğini hariç tutan ve onu terk eden bir komut satırı aracı arıyorum.

Bunu test amacıyla, yani HTTP POST istekleri yayınlayan istemcileri test etmek için kullanmak istiyorum.

Bunun anlamı, meslektaşıyı curl -Faradığım (test POST'larını bir HTTP sunucusuna göndermek için kullanabileceğim).

Belki bir şey gibi socat TCP4-LISTEN:80,fork,bind=127.0.0.1 ...- ama socat yeterli değil çünkü HTTP konuşmuyor.


1
Belki de soruyu doğru anlamıyorum, ancak tek ihtiyacınız POST isteğini bırakmaksa, netcat( ncbazı sistemlerde) -l(listen) ve -p(port numarası) seçenekleriyle kullanabilirsiniz.
peterph

1
@peterph, nckısmi test için kullanabilirsiniz - ancak aşağıdaki dezavantajları görebiliyorum: 1) HTTP durum kodunu göndermiyor 2) Ctrl + D tuşlarına basmalıyım, sonra bağlantıyı kapatma isteğini gördükten sonra 3) bilmiyorum 'Beklenti: 100-devam' başlığına 4 sonra tepki nasıl?) 'Transfer-Kodlama: parçalanmış' başlığını nasıl kullanacağını bilmiyor - muhtemelen sadece ilk (muhtemelen) boş yığın
gösterecektir

Yanıtlar:


16

Gibi basit çekirdek komut satırı araçları nc, socatoluyor belirli HTTP şeyler (parçaları, transfer kodlamaları, vb) işlemek mümkün görünmüyor. Sonuç olarak, bu gerçek bir web sunucusuyla konuşmaya kıyasla beklenmedik bir davranışa neden olabilir. Bu yüzden ilk düşüncem, küçük bir web sunucusu kurma ve istediğin şeyi yapma:

Python Tornado kullanarak bulabildiğim en kısa şey :

#!/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()

Değiştir pprintçıkışına örneğin ihtiyacınız sadece belirli alanları, çizgi self.request.bodyveya self.request.headers. Yukarıdaki örnekte tüm arabirimlerde 8080 numaralı bağlantı noktasını dinler.

Buna alternatifler bol. web.py , Şişe , vb

(Oldukça Python odaklıyım, üzgünüm)


Çıktı yolunu beğenmiyorsanız, yine de çalıştırın ve şöyle deneyin tcpdump:

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

Tüm HTTP-POST isteklerinin gerçek bir ham dökümünü görmek için. Alternatif olarak, sadece Wireshark'ı çalıştırın.


1
Bu çok yararlı parçacığı bulan başkaları için - sorulanı yapar - ancak POST cesedi görmek istiyorsanız, budur pprint.pprint(self.request.body). Not self.request.bodyziyade self.body. İçin aynı self.request.headers. Bkz tornado.readthedocs.org/en/latest/...
mozz100

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.