Используя Python на Dreamhost, верните XML-документ (не HTML)

Документация Dreamhost Python указывает, что скрипт Python должен печатать объявление типа HTML в качестве первой строки вывода. Однако мне нужно создать XML-ответ для стороннего API. Вот что я попробовал:

  • Установите объявление типа в XML. Dreamhost выдает ошибку, когда я делаю это.

  • Установите объявление типа в HTML, после чего следует объявление типа XML. Сторонний API не может разобрать это.

Как я могу обойти это ограничение?

1 ответ

Решение

Соответствующее предложение на странице, на которую вы ссылаетесь:

Если вы хотите просмотреть напечатанный вывод из своего кода Python, вы должны напечатать print "Content-type: text/html\n\n" в качестве первой строки вывода.

Обратите внимание на первую часть - "если вы хотите просмотреть печатную продукцию". Это лишь требование, если вы ожидаете, что веб-браузер сможет отображать ваши выходные данные в формате HTML. Вы также можете вернуть изображения / GIF, аудио / MPEG или любой другой допустимый тип MIME.

Dreamhost выдает ошибку, когда я делаю это.

Вы уверены в этом? Или ваш браузер отображает ошибку, потому что он получил тип контента, с которым он не знает, что делать? Попробуйте использовать cURL, чтобы поразить ваш скрипт вместо браузера.

(Следовать за)

Я убедился, что вывод XML действительно работает так, как рекламируется, загрузив следующий простой Python CGI в мою учетную запись DreamHost по адресу http://tests.shermpendley.com/person.py

#!/usr/bin/python

def main():
    print "Content-type: text/xml"
    print
    print '<?xml version="1.0" encoding="UTF-8" ?>'
    print '<person born="1912/06/23" died="1954/06/07">'
    print '    <name>Alan Turing</name>'
    print '</person>'

if __name__ == "__main__":
    main()

Тестируя его с помощью cURL, я получаю:

Macintosh:~ sherm$ curl -i http://tests.shermpendley.com/person.py
HTTP/1.1 200 OK
Date: Mon, 28 Mar 2011 00:14:50 GMT
Server: Apache
Vary: Accept-Encoding
Content-Length: 124
Content-Type: text/xml

<?xml version="1.0" encoding="UTF-8" ?>
<person born="1912/06/23" died="1954/06/07">
    <name>Alan Turing</name>
</person>

Чтобы диагностировать "500 Ошибка сервера", проверьте свои журналы ошибок. Подключите (с помощью SSH, SFTP, FTP - все, что вы обычно используете для управления своими файлами) к своей учетной записи и посмотрите "/home/ndomusername‹/logs/ndomsitename‹/error.log" Например, когда я представляю преднамеренное Синтаксическая ошибка в выше, затем попытался получить его с помощью cURL, я нашел следующее в error.log:

[Sun Mar 27 17:18:10 2011] [error] [client 98.236.96.39]   File "person.py", line 3
[Sun Mar 27 17:18:10 2011] [error] [client 98.236.96.39]     bogus!
[Sun Mar 27 17:18:10 2011] [error] [client 98.236.96.39]          ^
[Sun Mar 27 17:18:10 2011] [error] [client 98.236.96.39] SyntaxError: invalid syntax
[Sun Mar 27 17:18:10 2011] [error] [client 98.236.96.39] Premature end of script headers: person.py
Другие вопросы по тегам