เซิร์ฟเวอร์ HTTP ทั่วไปที่เพิ่งส่งคำขอ POST หรือไม่


24

ฉันกำลังมองหาเครื่องมือบรรทัดคำสั่งที่ฟังในส่วนที่กำหนดอย่างมีความสุขยกเว้นทุกคำขอ HTTP POST และทิ้งมัน

ฉันต้องการใช้เพื่อวัตถุประสงค์ในการทดสอบเช่นสำหรับการทดสอบลูกค้าที่ออกคำขอ HTTP POST

นั่นหมายถึงฉันกำลังค้นหาคู่ค้าcurl -F(ซึ่งฉันสามารถใช้เพื่อส่ง HTTP POSTs ทดสอบไปยังเซิร์ฟเวอร์ HTTP)

อาจจะเป็นสิ่งที่ชอบsocat TCP4-LISTEN:80,fork,bind=127.0.0.1 ...- แต่ socat นั้นไม่เพียงพอเพราะมันไม่ได้พูดถึง HTTP


1
บางทีฉันอาจจะไม่เข้าใจคำถามได้อย่างถูกต้อง แต่ถ้าคุณต้องการที่จะทิ้งคำขอ POST คุณสามารถใช้netcat( ncในบางระบบ) ด้วยตัวเลือก-l(ฟัง) และ-p(หมายเลขพอร์ต)
เตอร์

1
@ peterph คุณสามารถใช้ncสำหรับการทดสอบบางส่วน - แต่ฉันเห็นข้อเสียดังต่อไปนี้: 1) มันไม่ส่งรหัสสถานะ HTTP 2) ฉันต้องกด Ctrl + D หลังจากที่ฉันเห็นคำขอปิดการเชื่อมต่อ 3) ไม่ทราบ วิธีการตอบสนองต่อเมื่อนั้น 'คาดว่า: 100- ต่อ' ส่วนหัว 4) ไม่รู้วิธีจัดการส่วนหัว 'Transfer-Encoding: chunked' - มันอาจจะแสดงเฉพาะอันว่างเปล่าอันแรก (อาจ)
maxschlepzig

คำถามที่คล้ายกันใน stackoverflow: stackoverflow.com/questions/5725430/ …
maxschlepzig

คำตอบ:


16

หลักง่ายเครื่องมือบรรทัดคำสั่งชอบnc, socatดูเหมือนจะไม่สามารถจัดการกับสิ่งที่เฉพาะเจาะจงของ HTTP ที่เกิดขึ้น (ชิ้น, การเข้ารหัสการถ่ายโอน ฯลฯ ) ดังนั้นสิ่งนี้อาจทำให้เกิดพฤติกรรมที่ไม่คาดคิดเมื่อเปรียบเทียบกับการพูดคุยกับเว็บเซิร์ฟเวอร์จริง ดังนั้นความคิดแรกของฉันคือการแบ่งปันวิธีที่เร็วที่สุดที่ฉันรู้ในการตั้งค่าเว็บเซิร์ฟเวอร์เล็ก ๆ และทำให้มันทำในสิ่งที่คุณต้องการ: ทิ้งเอาท์พุททั้งหมด

สั้นที่สุดที่ฉันสามารถใช้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()

เปลี่ยนpprintเส้นเพื่อส่งออกเท่านั้นเฉพาะสาขาที่คุณต้องการเช่นหรือself.request.body self.request.headersในตัวอย่างด้านบนจะฟังพอร์ต 8080 บนอินเตอร์เฟสทั้งหมด

ทางเลือกนี้มีมากมาย web.py , ขวด , ฯลฯ

(ฉันค่อนข้าง Python มุ่งเน้นขอโทษ)


หากคุณไม่ชอบวิธีการแสดงผลให้เปิดใช้งานและลองใช้tcpdumpวิธีนี้:

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

เพื่อดูการถ่ายโอนข้อมูลดิบจริงของคำขอ HTTP-POST ทั้งหมด หรือเพียงแค่เรียกใช้ Wireshark


1
สำหรับคนอื่น ๆ ที่พบนี้ตัวอย่างข้อมูลที่เป็นประโยชน์มาก - มันไม่สิ่งที่ถูกถาม - แต่ถ้าคุณต้องการที่จะเห็นร่างกาย POST pprint.pprint(self.request.body)ก็ หมายเหตุมากกว่าself.request.body สำหรับเดียวกันself.body self.request.headersดูtornado.readthedocs.org/en/latest/…
mozz100

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.