【问题标题】:Link to external url in static Tornado page链接到静态 Tornado 页面中的外部 URL
【发布时间】:2015-06-17 18:14:15
【问题描述】:

我制作了一个 html 文件和一个 python 脚本来通过 websocket 和 Tornado Web 服务器来控制我的树莓派 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 将其作为来自树莓派的静态页面服务器时,这将有效。在 javascript 控制台中,我收到消息:“加载资源失败:服务器响应状态为 404(未找到)”。

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

谢谢!

【问题讨论】:

    标签: javascript python websocket raspberry-pi tornado


    【解决方案1】:

    问题似乎在于 Google 正在根据 Referer 标头阻止使用此 API。当文件在本地磁盘上时,不会发送 Referer 并且它可以工作,但是当通过 HTTP 访问文件时,会发送 Referer 并且 Google 返回 404。有关更多详细信息,包括可能的解决方法,请参阅Request to Google Text-To-Speech API

    【讨论】:

    • 感谢您的回答。我将研究解决方法,看看是否可以这样解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多