Простой HTTP-сервер, который будет отправлять один и тот же файл для всех запросов?

Мне нужно отладить приложение XML-RPC, которое отправляет ответы XML по HTTP. У меня есть образец XML-ответа (т.е. данные с сервера, отправленные клиенту, который не работает), я хотел бы отладить свое приложение. В идеале мне нужен простой HTTP-сервер, который будет обслуживать один файл в ответ на все запросы. Кто-то просит /? Отправьте им этот файл. Кто-то делает сообщение для /server/page.php с определенным cookie? Просто отправьте им этот файл. Меня не волнует многопоточность или безопасность. Мне нужно будет использовать это только в течение нескольких часов для отладки. У меня есть рут на машине.

т.е. я надеюсь, что есть что-то простое в использовании, как это:

simple_http_server -p 12445 -f my_test_file

Я в курсе питона SimpleHTTPServer модуль, но я не уверен, как заставить это работать в этом случае.

3 ответа

Если у вас есть inetd установил, просто создай скрипт вроде (я ошибся, скрипт не нужен)

#! / bin / Баш
кошка $1

затем добавьте строку в inetd.conf

http stream  tcp   nowait root  /bin/cat cat /some/other/dir/file.txt

С Python просто расширить BaseHTTPServer.BaseHTTPRequestHandler класс и определить do_GET метод, затем запустить, как описано в документации, например,

import BaseHTTPServer
class HTTPHandlerOne(BaseHTTPServer.BaseHTTPRequestHandler):
  def do_GET(self): self.wfile.write("test\r\n")

def run(server_class=BaseHTTPServer.HTTPServer,
        handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    httpd.serve_forever()

run(handler_class=HTTPHandlerOne)

Вы можете добавить правило mod_rewrite к хосту apache, которое переписывает все запросы обратно в файл, который вы хотите обслуживать.

<VirtualHost *:80>
ServerName onefilevhost.local

RewriteEngine On
RewriteRule ^/(.*)? http://onefilevhost.local/serve/this/file.txt
</VirtualHost>

Вы можете сделать это с Синатрой довольно легко. Установить Синатра делает gem install sinatra и создать test_page.rb файл как это:

require 'sinatra'

get '/*' do
  File.read('/server/page.php')
end

Если у вас нет $RUBYOPT=rubygems на вашей раковине, добавить require 'rubygems' в начале.

Вы можете запустить его с ruby test_page.rb, Он будет прослушивать порт 4567 по умолчанию.

Другие вопросы по тегам