【问题标题】:Converting htaccess setting to BaseHTTPServer setting将 htaccess 设置转换为 BaseHTTPServer 设置
【发布时间】:2013-04-18 16:52:39
【问题描述】:

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

这在 apache 和 PHP 中是可能的,但在 python 中执行此操作的方法对我来说并不是特别明显。

原始htaccess: Redirect /embed.jpg http://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()

【问题讨论】:

  • 你是说它不起作用:到底发生了什么?

标签: python .htaccess iframe basehttpserver


【解决方案1】:

我可以从该代码中看到两个问题...

首先,&lt;img src="x.png" width=200 height=200&gt; 意味着浏览器应该期望返回图像数据,但是您将它们重定向到另一个返回 HTML 数据的 URL。

其次,我认为您在行前的if-block 中缺少return...

self.send_response(404)

我认为如果不修改 JavaScript 中的 DOM,就不可能用 &lt;iframe&gt; 标记替换 &lt;img&gt; 标记。

【讨论】:

  • 好点。我还将内容类型指示为图像,这是错误的,因为我试图提供 html。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-01
  • 2016-11-15
  • 2011-11-15
  • 1970-01-01
  • 2016-06-06
  • 1970-01-01
  • 2020-09-27
相关资源
最近更新 更多