Python 将HttAccess设置转换为BaseHTTPServer设置

Python 将HttAccess设置转换为BaseHTTPServer设置,python,.htaccess,iframe,basehttpserver,Python,.htaccess,Iframe,Basehttpserver,所以我想做的是允许用户在他们的网站上嵌入一个图片,然后这个图片会被一个iframe自动替换,里面有他们的按钮。其原因是为了方便用户避免在不允许的网络上使用js或其他代码 这在apache和PHP中是可能的,但在python中实现这一点的方法对我来说并不特别明显 原始访问: Redirect/embed.jpghttp://somesite.com/embed.php 但在python中,它实际上不起作用(本例不起作用) server.py: #!/usr/bin/env python impo

所以我想做的是允许用户在他们的网站上嵌入一个图片,然后这个图片会被一个iframe自动替换,里面有他们的按钮。其原因是为了方便用户避免在不允许的网络上使用js或其他代码

这在apache和PHP中是可能的,但在python中实现这一点的方法对我来说并不特别明显

原始访问:
Redirect/embed.jpghttp://somesite.com/embed.php

但在python中,它实际上不起作用(本例不起作用)

server.py:

#!/usr/bin/env python

import BaseHTTPServer
import getopt
import socket
import sys

ADDR = ["", 8080]

def usage(f = sys.stdout):
    print >> f, "Usage: %s [ADDRESS [PORT]]" % sys.argv[0]

class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == "/":
            self.send_response(200)
            self.send_header("Content-type", "text/html; charset=utf-8")
            self.end_headers()
            print >> self.wfile, """\
<!DOCTYPE html>
<body bgcolor=dodgerblue>
<img src="x.png" width=200 height=200>
</body>
"""
            return
        if self.path == "/x.png":
            self.send_response(302)
            self.send_header("Content-type", "image/png")
            self.send_header("Location", "x.html")
            self.end_headers()
            return
        if self.path == "/x.html":
            self.send_response(200)
            self.send_header("Content-type", "text/html; charset=utf-8")
            self.end_headers()
            print >> self.wfile, """\
<!DOCTYPE html>
<body bgcolor=slateblue>
Inner HTML.
</body>
"""

        self.send_response(404)
        self.send_header("Content-type", "text/html; charset=utf-8")
        self.end_headers()
        print >> self.wfile, """\
<!DOCTYPE html>
Not found.
"""

class Server(BaseHTTPServer.HTTPServer):
    allow_reuse_address = True

opts, args = getopt.gnu_getopt(sys.argv[1:], "h", ["help"])
for o, a in opts:
    if o == "-h" or o == "--help":
        usage()
        sys.exit(0)

if len(args) >= 1:
    ADDR[0] = args[0]
if len(args) >= 2:
    ADDR[1] = args[1]
if len(args) >= 3:
    usage(sys.stderr)
    os.exit(1)

server = Server(tuple(ADDR), Handler)
print "Listening on %s:%d." % (server.server_name, server.server_port)
server.serve_forever()
#/usr/bin/env python
导入BaseHTTPServer
导入getopt
导入套接字
导入系统
地址=[“”,8080]
def使用量(f=sys.stdout):
打印>>f,“用法:%s[地址[端口]]%sys.argv[0]
类处理程序(BaseHTTPServer.BaseHTTPRequestHandler):
def do_获得(自我):
如果self.path==“/”:
自我发送_响应(200)
self.send_头(“内容类型”、“文本/html;字符集=utf-8”)
self.end_头()
打印>>self.wfile“\
"""
返回
如果self.path==“/x.png”:
self.send_响应(302)
self.send_标题(“内容类型”、“图像/png”)
self.send_标题(“Location”,“x.html”)
self.end_头()
返回
如果self.path==“/x.html”:
自我发送_响应(200)
self.send_头(“内容类型”、“文本/html;字符集=utf-8”)
self.end_头()
打印>>self.wfile“\
内部HTML。
"""
self.send_响应(404)
self.send_头(“内容类型”、“文本/html;字符集=utf-8”)
self.end_头()
打印>>self.wfile“\
没有找到。
"""
类服务器(BaseHTTPServer.HTTPServer):
允许重新使用地址=真
opts,args=getopt.gnuu getopt(sys.argv[1:]、“h”、[“help”])
对于o,a在选项中:
如果o==“-h”或o==“--help”:
用法()
系统出口(0)
如果len(args)>=1:
地址[0]=args[0]
如果len(args)>=2:
地址[1]=args[1]
如果len(args)>=3:
用法(sys.stderr)
操作系统退出(1)
服务器=服务器(元组(ADDR),处理程序)
打印“侦听%s:%d.”%(server.server\u名称,server.server\u端口)
服务器。永远为您服务()

我可以看到该代码存在两个问题

首先,
意味着浏览器应该期望返回图像数据,但是您可以将它们重定向到另一个返回HTML数据的URL

其次,我认为您在紧靠行前面的
if
-块中缺少了一个
return

self.send_response(404)

我认为如果不修改JavaScript中的DOM,用
标记替换
标记是不可能的。

你是说它不起作用:到底发生了什么事?很好。我还将内容类型指示为图像,这是错误的,因为我正在尝试提供html。