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

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

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

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

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

1 Ответ

1 голос
/ 28 марта 2011

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

Если вы хотите просмотреть вывод на печать из вашего кода 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 broadcast/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
...