从谷歌应用引擎生成非HTML输出
我正在尝试使用Max M的icalendar这个Python模块和谷歌的应用引擎,动态生成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的响应信息出现在页面的顶部呢?
5 个回答
1
不太确定这是不是问题的根源,但你应该设置内容类型,以表明这是日历数据,而不是HTML:
Content-Type: text/html; charset=utf-8
应该改成
Content-Type: text/calendar;
2
你不能这样做,"Status: 200 Ok....." 是一个HTTP头部信息,每次网络请求时,网页服务器都会输出这个信息。任何网页服务器都是这样工作的。
你的客户端需要读取HTTP响应的主体部分。
3
Web应用和应用引擎并不在意你返回的内容类型,所以这个问题和标签(或者没有标签)没有关系。你可能在代码的某个地方用了print
语句,这样会导致响应的头信息被当作响应内容的一部分发送出去。在WSGI应用中,你绝对不应该使用print
,而是应该像你粘贴的代码片段那样,使用self.response.out.write
。