Назад | Перейти на главную страницу

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

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

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

simple_http_server -p 12445 -f my_test_file

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

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

#! / bin / bash
кошка $ 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 vhost, которое перезаписывает все запросы обратно в файл, который вы хотите обслуживать.

<VirtualHost *:80>
ServerName onefilevhost.local

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

Вы можете сделать это с помощью Sinatra вполне легко. Установить sinatra, делая 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.