【发布时间】:2016-06-24 23:25:53
【问题描述】:
大家好,我刚刚制作了一个 python 程序,它可以通过它们的格式打开我的文件并设置它们的缓存控制时间。但问题是我的代码在我请求 jpg 文件时采用来自 favicon 的 ico 格式
这是我的代码:
#!/usr/bin/python
import tornado
import tornado.ioloop
import tornado.web
import sys , importlib
import os
import os.path
from urllib2 import Request, urlopen, URLError
from myconfig import *
import webbrowser
import time
conf2=locals()
if len(sys.argv) > 1:
conf = sys.argv[1]
else:
conf = 'dosya belirtilmedi'
print conf
def check( str ):
return conf2[str][0]
def check2( str ):
return conf2[str][1]
def check3( str ):
return conf2[str][2]
def do( str ):
return len(str)
def calculate(str):
if check3(str) == 'seconds':
return 1
elif check3(str) == 'minutes':
return 60
elif check3(str) == 'hours':
return 60*60
elif check3(str) == 'days':
return 60*60*24
elif check3(str) == 'weeks':
return 60*60*24*7
elif check3(str) == 'mounths':
return 60*60*24*7*4
elif check3(str) == 'years':
return 60*60*24*7*4*12
else:
return 5000
class GetFileHandler(tornado.web.RequestHandler):
def get(self,url):
x={}
f={}
path = sys.argv[1] + self.request.uri
data = self.request.uri
x = data.split(".")
if data == '/':
self.write("Ana Sayfa")
elif len(x) > 1:
z=x[1]
f=check(z).split("/")
j=f[1]
print j
print do(j)
print do(html)
if z in conf2:
self.set_header('Content-Type',check(z))
if (z in conf2 and do(j) != 3):
cal=calculate(z)
cal2=conf2[z][1]
total=cal*cal2
self.set_header('Cache-Control', 'max-age=%s, public' % total )
else:
self.set_header('Cache-Control', 'max-age=100, public')
print 100
if os.path.isfile(path) and os.access(path, os.R_OK):
with open(path, 'rb') as f:
y = f.read()
self.write(y)
self.finish()
else:
webbrowser.open('http://ecommerceblog.mightymerchant.com/wp-content/uploads/2007/10/404-image.jpg')
else:
self.write("YOK" + "=" + z)
else:
self.write("Dosya Formati Yok")
if __name__ == "__main__":
application = tornado.web.Application([
(r"/(.*)", GetFileHandler),])
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
这是我的配置文件:
jpg=["image/jpeg",23,"minutes"]
html=["text/html",30,"seconds"]
gif=["image/gif",3,"hours"]
png=["image/png"]
这是我的错误:
错误:tornado.application:未捕获的异常 GET /favicon.ico (127.0.0.1) HTTPServerRequest(protocol='http', host='localhost:8888', method='GET', uri='/favicon.ico', version='HTTP/1.1', remote_ip='127.0.0.1', headers={ 'Accept-Language': 'en-US,en;q=0.8', 'Accept-Encoding': 'gzip, deflate, sdch', 'Host': 'localhost:8888', 'Accept': '*/* ', 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.75 Safari/537.36', 'Connection': 'keep-alive', 'Referer' : 'http://localhost:8888/im.jpg'}) 回溯(最近一次通话最后): _execute 中的文件“/usr/local/lib/python2.7/dist-packages/tornado-4.3-py2.7-linux-x86_64.egg/tornado/web.py”,第 1443 行 结果 = 方法(*self.path_args,**self.path_kwargs) 文件“./w.py”,第 60 行,在 get f=check(z).split("/") 文件“./w.py”,第 22 行,检查中 返回 conf2[str][0] 键错误:'ico' 错误:tornado.access:500 GET /favicon.ico (127.0.0.1) 0.48ms这是我在浏览器上的问题的图像。正如你所看到的,我只发送 jpg 请求,但总是有 favicon 请求(内容类型是 text/html)。我只是想禁用它,可能会删除它。我无法理解原因。请帮助我,谢谢。
【问题讨论】:
-
修复您的代码。它充满了语法错误。
-
检查一切并重新运行程序没有语法错误
-
缩进都搞砸了。
-
您可以明确地请求来自另一个域的网站图标:
<link rel="shortcut icon" href="http://some-other-domain.com/favicon.ico">。这样,浏览器会将 favicon 请求发送到另一个域,您不会收到 500 错误。