我正在尝试使用Max M的iCal python模块和Google的应用引擎动态生成icalendar输出。但是,当我在<html>
的输出上省略锅炉板webapp.RequestHandler
页眉和页脚标签时,看起来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响应?
答案 0 :(得分:3)
Webapp和App Engine不关心您返回的内容类型,因此问题与标记无关(或缺少标记)。您的代码中某处可能有print
语句,这会导致标头作为响应正文的一部分发送。您永远不应在WSGI应用中使用print
- 始终在您粘贴的代码段中使用self.response.out.write
。
答案 1 :(得分:2)
你不能,“状态:200 Ok .....”是HTTP头,它将在Web服务器的每个请求中输出。任何Web服务器都会做同样的事情。
您的客户需要阅读http响应的正文。
答案 2 :(得分:1)
不确定这是否是真正的问题,但您应该设置内容类型以指示这是日历数据,而不是HTML:
Content-Type: text/html; charset=utf-8
应该是
Content-Type: text/calendar;
答案 3 :(得分:0)
这似乎是输出标准的HTTP响应头。尝试在您的回复中添加“Content-Disposition:attachment; filename ='%s'”%filename HTTP标头,以获取所需的文件。
答案 4 :(得分:0)
需要考虑的其他事项:
如果要从其他文件导入代码,而另一个文件是webapp,则需要确保它只作为webapp运行(如果它是主要文件)
另一个词 - 从这里开始
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()
这个问题让我筋疲力尽了几个小时,这是我能找到的唯一一个接近它的帖子之一。我希望这能帮助其他人和我一样有问题!