создание не HTML-вывода из движка приложения Google - PullRequest
1 голос
/ 23 февраля 2011

Я пытаюсь динамически сгенерировать вывод iCal , используя модуль Python Max M icalendar и механизм приложений Google. Однако, когда я опускаю теги заголовка и нижнего колонтитула <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 не отображался в верхней части страницы?

Ответы [ 5 ]

3 голосов
/ 24 февраля 2011

Webapp и App Engine не заботятся о том, какой тип контента вы возвращаете, поэтому проблема не связана с тегом (или его отсутствием). Скорее всего, где-то в вашем коде есть оператор print, из-за которого заголовки отправляются как часть тела ответа. Никогда не следует использовать print в приложении WSGI - всегда используйте self.response.out.write как в вставленном вами фрагменте.

2 голосов
/ 23 февраля 2011

Вы не можете, «Status: 200 Ok .....» - это заголовок HTTP, который будет выводиться при каждом запросе веб-сервером.Любой веб-сервер будет делать то же самое.

Ваш клиент должен будет прочитать тело ответа http.

1 голос
/ 23 февраля 2011

Не уверен, если это реальная проблема или нет, но вы должны установить тип содержимого, чтобы указать, что это данные календаря, а не HTML:

Content-Type: text/html; charset=utf-8

должно быть

Content-Type: text/calendar;

0 голосов
/ 22 марта 2011

Что еще нужно учитывать:

Если вы импортируете код из другого файла, и этот другой файл является веб-приложением, вам нужно убедиться, что он работает как веб-приложение, только если оно является основным

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()

Эта проблема убивала меня часами, и это была одна из единственных публикаций, которые я мог найти,близко к этому.Я надеюсь, что это поможет кому-то еще с той же проблемой, что и я!

0 голосов
/ 23 февраля 2011

Это похоже на вывод стандартных заголовков ответа HTTP. Попробуйте добавить «Content-Disposition: attachment; filename = '% s'"% filename HTTP header в ваш ответ, чтобы получить желаемый загруженный файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...