[英]generating non-html output from google's app engine
我正在尝试使用Max M的icalendar python模块和google的应用程序引擎动态生成iCal输出。 但是,当我在webapp.RequestHandler
的输出中省略样板<html>
标头和页脚标记时,似乎HTTP 200响应已添加到文件顶部。
当我注册此代码时:
class Calendar(webapp.RequestHandler):
def get(self):
self.response.out.write('BEGIN:VCALENDAR\n')
[...]
使用webapp.WSGIApplication
,响应如下所示:
Status: 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Content-Length: 11133
BEGIN:VCALENDAR
[...]
如何省略<html>
标记,而不在页面顶部显示HTTP 200响应?
Webapp和App Engine不在乎您返回的内容类型,因此问题与标记无关(或缺少标记)。 您可能在代码中的某处有一条print
语句,这导致标题作为响应主体的一部分发送。 您永远不要在WSGI应用程序中使用print
-始终像粘贴的代码段一样使用self.response.out.write
。
您不能,“状态:200 Ok .....”是HTTP头,它将由Web服务器在每次请求时输出。 任何Web服务器都会做同样的事情。
您的客户将需要阅读http响应的正文 。
不知道这是否是真正的问题,但是您应该设置内容类型以指示这是日历数据,而不是HTML:
Content-Type: text/html; charset=utf-8
应该
Content-Type: text/calendar;
这似乎正在输出标准的HTTP响应标头。 尝试在响应中添加“ Content-Disposition:附件; filename ='%s'”%filename HTTP标头,以下载所需的文件。
还有其他需要考虑的事项:
如果您要从另一个文件导入代码,并且该另一个文件是一个Web应用程序,则需要确保该文件仅在作为主应用程序时才作为Web应用程序运行
Anotherwords-从这里开始
application = webapp.WSGIApplication(
[
('/locate', Request),
],
debug=False)
util.run_wsgi_app(application)
对此
application = webapp.WSGIApplication(
[
('/locate', Request),
],
debug=False)
def main():
util.run_wsgi_app(application)
if __name__ == "__main__":
main()
这个问题使我丧命了好几个小时,这是我能找到的与之接近的仅有的帖子之一。 我希望这将对其他与我有同样问题的人有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.