链接到静态Tornado页面中的外部URL

时间:2015-04-12 10:18:13

标签: javascript python websocket raspberry-pi tornado

我已经制作了一个html文件和一个python脚本来通过websocket和Tornado Web Server控制我的raspberry pi GPIO引脚。它很棒。为了提供我的静态html页面,我在python脚本中使用以下代码:

application = tornado.web.Application([
    (r'/escape/media/(.*)',tornado.web.StaticFileHandler,{"path":'/home/pi/myproject/media'}),
    (r'/escape/(.*)',tornado.web.StaticFileHandler,{"path":'/home/pi/myproject'}),
    (r'/mycode',WSHandler)
])
if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(8888)
    print 'Websocket Server Start ...'
    tornado.ioloop.IOLoop.instance().start()

在html文件中,我尝试加载外部mp3文件来播放:

function talk() {
            text = encodeURI(document.getElementById("textinput").value);
            mp3 = new Audio('http://translate.google.com/translate_tts?tl=en&q=' + text);
            mp3.play();
        }

如果我在我的Windows机器上从我自己的磁盘加载网页,但是当Tornado将其作为来自raspberry pi的静态页面服务时,这是有效的。在javascript控制台中,我收到消息:"无法加载资源:服务器响应状态为404(未找到)"。

我不明白为什么这是一个问题,因为它是外部网站的绝对链接。有谁知道解决方案?

谢谢!

1 个答案:

答案 0 :(得分:0)

看起来问题是Google阻止使用基于Referer标头的API。当文件在本地磁盘上时,没有发送Referer并且它可以工作,但是当通过HTTP访问文件时,将发送Referer并且Google返回404.有关详细信息,包括可能的解决方法,请参阅Request to Google Text-To-Speech API