सामान्य HTTP सर्वर जो केवल POST अनुरोधों को डंप करता है?


24

मैं एक कमांड लाइन टूल की तलाश कर रहा हूं जो किसी दिए गए भाग को सुनता है, खुशी से हर HTTP पोस्ट अनुरोध को स्वीकार करता है और इसे डंप करता है।

मैं इसका उपयोग परीक्षण उद्देश्यों के लिए करना चाहता हूं, अर्थात HTTP POST अनुरोध जारी करने वाले ग्राहकों के परीक्षण के लिए।

इसका मतलब है कि मैं समकक्ष की खोज curl -Fकर रहा हूं (जिसका उपयोग मैं एक HTTP सर्वर पर परीक्षण HTTP POST भेजने के लिए कर सकता हूं)।

शायद ऐसा कुछ socat TCP4-LISTEN:80,fork,bind=127.0.0.1 ...- लेकिन समाज पर्याप्त नहीं है क्योंकि यह HTTP पर बात नहीं करता है।


1
शायद मैं सवाल सही ढंग से समझ नहीं है, लेकिन अगर आप सभी की जरूरत पोस्ट अनुरोध डंप करने के लिए है, तो आप उपयोग कर सकते हैं netcat( ncकुछ सिस्टम पर) -l(सुनने) और -p(पोर्ट संख्या) विकल्प।
पेट्रफ

1
@peterph, आप ncआंशिक परीक्षण के लिए उपयोग कर सकते हैं - लेकिन मैं निम्नलिखित नुकसान देख सकता हूं: 1) यह HTTP स्थिति कोड 2 नहीं भेजता है) मुझे कनेक्शन को बंद करने के अनुरोध को देखने के बाद Ctrl + D को हिट करना होगा) यह नहीं पता तब कैसे प्रतिक्रिया करें 'उम्मीद: 100-जारी' हेडर 4) यह नहीं जानता कि 'ट्रांसफर-एन्कोडिंग: chunked' हेडर को कैसे संभालना है - यह संभवतः पहले (शायद) खाली चंक दिखाता है
maxschlepzig

जवाबों:


16

सरल कोर कमांड लाइन उपकरण जैसे nc, socatप्रतीत हो रहा है कि विशिष्ट HTTP सामान को संभालने में सक्षम नहीं है (चंक्स, ट्रांसफर एन्कोडिंग, आदि)। परिणामस्वरूप यह एक वास्तविक वेब सर्वर से बात करने की तुलना में अप्रत्याशित व्यवहार पैदा कर सकता है। इसलिए, मेरा पहला विचार यह है कि जिस तरह से मैं एक छोटा सा वेब सर्वर स्थापित करना चाहता हूं, उसे तेजी से साझा करना है और यह वही करना है जो आप चाहते हैं: अपने आउटपुट को डंप करें।

सबसे छोटा मैं पायथन टोरनेडो का उपयोग करके आ सकता है :

#!/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 , बोतल , आदि।

(मैं काफी पायथन उन्मुख हूं, क्षमा करें)


अगर आपको इसका तरीका पसंद नहीं है, तो इसे वैसे भी चलाएं और 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

40

मैं खुद भी यही ढूंढ रहा था और Node.js http-echo-server में भाग गया :

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

यह सभी अनुरोधों को स्वीकार करता है और कमांडर-लाइन को हेडर सहित पूर्ण अनुरोध को ईकोस करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.