2013-04-18 2 views
0

그래서 내가하려는 것은 사용자가 사이트에 이미지를 포함시킨 다음 해당 이미지가 버튼이있는 iframe에 자동으로 대체되도록 허용하는 것입니다. 그 이유는 사용자가 허용되지 않는 네트워크에서 js 나 다른 코드를 사용하는 것을 피하는 것이 쉽기 때문입니다.htaccess 설정을 BaseHTTPServer 설정으로 변환

이것은 PHP가있는 아파치에서 가능하지만 파이썬에서이 작업을 수행하는 방법은 특히 분명하지 않습니다.

원래 htaccess로 : Redirect /embed.jpg http://somesite.com/embed.php

그러나 파이썬에서 , 그것은 정말 (이 예제는 작동하지 않습니다) 작동하지 않습니다.

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() 
+0

제대로 작동하지 않는다고 말하는 것입니까? 정확히 무슨 일이 일어나고 있습니까? –

답변

0

두 문제 ...

첫째는 <img src="x.png" width=200 height=200> 다시 이미지 데이터를 기대한다 브라우저를 의미하지만, 대신 다른로 리디렉션 HTML 데이터를 반환하는 URL입니다.

둘째, 나는

self.send_response(404) 

나는 그것이 <iframe> 태그없이 함께 <img> 태그를 교체 할 수 생각하지 않습니다 ... 당신이 직접 라인 전에 if - 블록에서 return 누락 것 같아요 자바 스크립트에서 DOM을 수정합니다.

+0

좋은 지적. 또한 content-type을 이미지로 표시했습니다. html을 제공하기 때문에 잘못된 것입니다. –

관련 문제