简单的 HTTP 服务器会为所有请求发送相同的文件吗?

简单的 HTTP 服务器会为所有请求发送相同的文件吗?

我需要调试一个 XML-RPC 应用程序,该应用程序通过 HTTP 发送 XML 回复。我有一个示例 XML 回复(即来自服务器的数据,发送到不起作用的客户端),我想调试我的应用程序。理想情况下,我想要一个简单的 HTTP 服务器,它将提供一个文件来回复所有请求。有人提出请求/?向他们发送此文件。有人使用某个 cookie 发帖/server/page.php?只需向他们发送此文件。我不关心多线程或安全性。我只需要使用它几个小时进行调试。我在机器上有 root 权限。

我希望有像这样容易使用的东西:

simple_http_server -p 12445 -f my_test_file

我知道 python 的SimpleHTTPServer模块,但我不确定在这种情况下如何让它工作。

答案1

如果你已经inetd安装了,只需创建一个脚本(我犯了一个错误,不需要该脚本)

/bin/bash
cat $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)

答案2

您可以向 apache vhost 添加 mod_rewrite 规则,将所有请求重写回您想要提供的文件。

<VirtualHost *:80>
ServerName onefilevhost.local

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

答案3

你可以这样做西纳特拉非常简单。安装 sinatragem install sinatra并创建一个test_page.rb文件,如下所示:

require 'sinatra'

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

$RUBYOPT=rubygems如果你的 shell 上没有,请require 'rubygems'在开头添加。

你可以用 来运行它ruby test_page.rb。它默认会监听 4567 端口。

相关内容