Простой 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 по умолчанию.