POST 요청 만 덤프하는 일반 HTTP 서버?


24

주어진 부분에서 수신 대기하고 모든 HTTP POST 요청을 제외하고 그것을 덤프하는 명령 줄 도구를 찾고 있습니다.

테스트 목적, 즉 HTTP POST 요청을 발행하는 클라이언트를 테스트하는 데 사용하고 싶습니다.

이는 상대방을 검색하고 있음을 의미합니다 curl -F(테스트 HTTP POST를 HTTP 서버로 보내는 데 사용할 수 있음).

아마도 같은 것입니다 socat TCP4-LISTEN:80,fork,bind=127.0.0.1 ...-그러나 socat은 HTTP를 말하지 않기 때문에 충분하지 않습니다.


1
어쩌면 나는 질문을 올바르게 이해하지 못하지만 POST 요청을 덤프하는 것만으로 netcat( nc일부 시스템에서) -l(듣기) 및 -p(포트 번호) 옵션을 사용할 수 있습니다.
peterph December

1
@ peterph, nc부분 테스트에 사용할 수는 있지만 다음과 같은 단점이 있습니다 .1) HTTP 상태 코드를 보내지 않습니다 .2) 연결을 끊으 라는 요청을 본 후에 Ctrl + D를 눌러야합니다 .3) 알 수 없음 어떻게 '기대 : 100 - 계속'다음에 반응하는 헤더 4)는 '전송 - 인코딩 : 청크'처리하는 방법을 모르는 헤더 - 그것은 아마 첫 번째 (아마도) 비어있는 체크 표시
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 , Bottle

(나는 꽤 파이썬 지향적입니다, 미안합니다)


출력 방법이 마음에 들지 않으면 어쨌든 실행하고 다음과 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.