Máy chủ HTTP chung chỉ bỏ các yêu cầu POST?


24

Tôi đang tìm kiếm một công cụ dòng lệnh lắng nghe trên một phần nhất định, vui vẻ chấp nhận mọi yêu cầu POST HTTP và bỏ nó.

Tôi muốn sử dụng nó cho mục đích thử nghiệm, tức là để kiểm tra các máy khách phát hành các yêu cầu POST HTTP.

Điều đó có nghĩa là tôi đang tìm kiếm đối tác curl -F(mà tôi có thể sử dụng để gửi POST HTTP thử nghiệm đến máy chủ HTTP).

Có lẽ một cái gì đó giống như socat TCP4-LISTEN:80,fork,bind=127.0.0.1 ...- nhưng socat là không đủ vì nó không nói HTTP.


1
Có thể tôi không hiểu chính xác câu hỏi, nhưng nếu tất cả những gì bạn cần là bỏ yêu cầu POST, bạn có thể sử dụng netcat( nctrên một số hệ thống) với các tùy chọn -l(nghe) và -p(số cổng).
peterph

1
@peterph, bạn có thể sử dụng ncđể kiểm tra một phần - nhưng tôi có thể thấy những nhược điểm sau: 1) nó không gửi mã trạng thái HTTP 2) Tôi phải nhấn Ctrl + D sau khi tôi thấy yêu cầu đóng kết nối 3) nó không biết Làm thế nào để phản ứng lại sau đó 'Mong đợi: 100 tiếp tục' tiêu đề 4) nó không biết cách xử lý tiêu đề 'Transfer-Encoding: chunked' - có lẽ nó chỉ hiển thị đoạn đầu tiên (có thể) trống
maxschlepzig

Câu hỏi tương tự về stackoverflow: stackoverflow.com/questions/5725430/ từ
maxschlepzig

Câu trả lời:


16

Các công cụ dòng lệnh đơn giản như nc, socatdường như không thể xử lý các công cụ HTTP cụ thể đang diễn ra (khối, mã hóa chuyển, v.v.). Kết quả là điều này có thể tạo ra hành vi bất ngờ so với việc nói chuyện với một máy chủ web thực sự. Vì vậy, suy nghĩ đầu tiên của tôi là chia sẻ cách nhanh nhất mà tôi biết về việc thiết lập một máy chủ web nhỏ và làm cho nó chỉ làm những gì bạn muốn: kết xuất tất cả đầu ra.

Thời gian ngắn nhất tôi có thể sử dụng 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()

Thay thế pprintdòng để chỉ xuất ra các trường cụ thể bạn cần, ví dụ self.request.bodyhoặc self.request.headers. Trong ví dụ trên, nó lắng nghe trên cổng 8080, trên tất cả các giao diện.

Các lựa chọn thay thế cho điều này là rất nhiều. web.py , Chai , v.v.

(Tôi khá là Python, xin lỗi)


Nếu bạn không thích cách xuất của nó, hãy chạy nó và thử tcpdumpnhư thế này:

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

để xem kết xuất thô thực sự của tất cả các yêu cầu HTTP-POST. Ngoài ra, chỉ cần chạy Wireshark.


1
Đối với những người khác tìm thấy đoạn trích rất hữu ích này - nó thực hiện những gì đã được hỏi - nhưng nếu bạn muốn xem phần POST, thì đó là pprint.pprint(self.request.body). Lưu ý self.request.bodyhơn là self.body. Tương tự cho self.request.headers. Xem tornado.readthedocs.org/en/latest/ từ
mozz100

40

Tôi cũng đang tìm kiếm cái này và chạy vào máy chủ http-echo-Node.js :

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

Nó chấp nhận tất cả các yêu cầu và lặp lại toàn bộ yêu cầu bao gồm cả tiêu đề cho dòng lệnh.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.