【问题标题】:SimpleHTTPServer add default.htm default.html to index filesSimpleHTTPServer 将 default.htm default.html 添加到索引文件
【发布时间】:2014-07-30 16:27:23
【问题描述】:

我总是使用 $ python -m SimpleHTTPServer 进行快速的本地静态 Web 测试,它与 index.htmindex.html 作为索引文件非常有效。

但是,我目前正在进行的项目需要使用 default.htmdefault.html。有人可以帮它写一个简单的脚本吗?

我在web 上找到了以下示例,希望对入门有所帮助。

import sys, SimpleHTTPServer, BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler

SimpleHTTPRequestHandler.protocol_version = "HTTP/1.0"

httpd = BaseHTTPServer.HTTPServer(('127.0.0.1', 8000), SimpleHTTPRequestHandler)

sa = httpd.socket.getsockname()

print "Serving HTTP on", sa[0], sa[1], "..."

httpd.serve_forever()

【问题讨论】:

    标签: python simplehttpserver


    【解决方案1】:

    这是一种方法:

    import os
    import sys
    import SimpleHTTPServer
    import BaseHTTPServer
    
    class MyHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
        def do_GET(self):
            if not self.redirect():
                SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)
    
        def do_HEAD(self):
            if not self.redirect():
                SimpleHTTPServer.SimpleHTTPRequestHandler.do_HEAD(self)
    
        def redirect(self):
            path = self.translate_path(self.path)
            if os.path.isdir(path):
                for base in "index", "default":
                    for ext in ".html", ".htm", ".txt":
                        index = base+ext
                        index_path = os.path.join(path, index)
                        if os.path.exists(index_path):
                            new_path = self.path
                            if not new_path.endswith('/'):
                                new_path += '/'
                            new_path += index
    
                            self.send_response(302)
                            self.send_header("Location", new_path)
                            self.end_headers()
                            return True
            return False
    
    def test(HandlerClass = MyHTTPRequestHandler,
             ServerClass = BaseHTTPServer.HTTPServer):
        BaseHTTPServer.test(HandlerClass, ServerClass)
    
    
    if __name__ == '__main__':
        test()
    

    这是另一种方式。

    import os
    import sys
    from SimpleHTTPServer import SimpleHTTPRequestHandler
    import BaseHTTPServer
    
    class MyHTTPRequestHandler(SimpleHTTPRequestHandler):
        def translate_path(self,path):
            path = SimpleHTTPRequestHandler.translate_path(self,path)
            if os.path.isdir(path):
                for base in "index", "default":
                    for ext in ".html", ".htm", ".txt":
                        index = path + "/" + base + ext
                        if os.path.exists(index):
                            return index
            return path
    
    def test(HandlerClass = MyHTTPRequestHandler,
             ServerClass = BaseHTTPServer.HTTPServer):
        BaseHTTPServer.test(HandlerClass, ServerClass)
    
    
    if __name__ == '__main__':
        test()
    

    最后,这是一个包 HTTP 和 HTTPS 服务器,带有各种有用的参数。使用-h 运行此命令以查看帮助消息。

    #!/usr/bin/python2.7
    
    import os
    import sys
    from SimpleHTTPServer import SimpleHTTPRequestHandler
    import BaseHTTPServer
    
    class MyHTTPRequestHandler(SimpleHTTPRequestHandler):
        def translate_path(self,path):
            path = SimpleHTTPRequestHandler.translate_path(self,path)
            if os.path.isdir(path):
                for base in "index", "default":
                    for ext in ".html", ".htm", ".txt":
                        index = path + "/" + base + ext
                        if os.path.exists(index):
                            return index
            return path
    
    def test(HandlerClass = MyHTTPRequestHandler,
             ServerClass = BaseHTTPServer.HTTPServer):
    
        import argparse
        parser = argparse.ArgumentParser(description='Dump ANT files')
        parser.add_argument('-p','--port',
                            type=int,
                            default=8080,
                            help='port number')
        parser.add_argument('-i','--ip',
                            default='',
                            help='IP address to listen on: "" means all')
        parser.add_argument('-d','--docroot',
                            default='.',
                            help='Directory to serve files from')
        parser.add_argument('-s','--https',
                            action='store_true',
                            help='Use HTTPS instead of HTTP')
        parser.add_argument('-c', '--certfile', help='server certificate file')
        parser.add_argument('-k', '--keyfile', help='private key file')
        args = parser.parse_args()
        if os.path.isdir(args.docroot):
            os.chdir(args.docroot)
        else:
            parser.error('Docroot must be a directory')
    
        proto = 'HTTP'
        server_address = (args.ip, args.port)
        httpd = ServerClass(server_address, HandlerClass)
    
        if args.https:
            import ssl
            if not args.certfile:
                parser.error('Certificate file must be specified')
            if not os.path.isfile(args.certfile):
                parser.error('Certificate file must exist')
            if not args.keyfile:
                parser.error('Private key file must be specified')
            if not os.path.isfile(args.keyfile):
                parser.error('Private key file must exist')
            httpd.socket = ssl.wrap_socket(
                httpd.socket, 
                server_side=True,
                certfile=args.certfile,
                keyfile=args.keyfile)
            proto = 'HTTPS'
    
        sa = httpd.socket.getsockname()
        print "Serving %s on %s port %s ..."%(proto, sa[0], sa[1])
        httpd.serve_forever()
    
    
    
    if __name__ == '__main__':
        test()
    

    【讨论】:

      猜你喜欢
      • 2017-04-06
      • 2015-08-12
      • 1970-01-01
      • 2012-01-18
      • 2023-03-05
      • 1970-01-01
      • 2011-05-18
      • 2011-04-29
      • 2015-11-06
      相关资源
      最近更新 更多