从谷歌应用引擎生成非HTML输出

1 投票
5 回答
771 浏览
提问于 2025-04-16 12:24

我正在尝试使用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

撰写回答