在Dreamhost上使用Python,返回XML文档(而非HTML)

0 投票
1 回答
1349 浏览
提问于 2025-04-16 14:32

Dreamhost的Python文档说明,一个Python脚本的输出第一行必须是HTML类型声明。不过,我需要为一个第三方API生成XML响应。以下是我尝试过的方法:

  • 把类型声明设置为XML,但Dreamhost会报错。

  • 先把类型声明设置为HTML,然后再加上XML类型声明,但第三方API无法解析这个。

我该如何解决这个限制呢?

1 个回答

1

你链接的页面中相关的句子是:

如果你想查看你Python代码的打印输出,你必须在输出的第一行打印
"Content-type: text/html\n\n"。

注意第一部分 - “如果你想查看打印输出。” 这只是一个要求,只有在你希望网页浏览器能够把你的输出显示为HTML时才需要。你也可以返回图像/gif、音频/mpeg,或者任何其他有效的MIME类型。

当我这样做时,Dreamhost会报错。

你确定吗?还是说你的 浏览器 显示了错误,因为它收到了一个它不知道怎么处理的内容类型?试试用cURL来访问你的脚本,而不是用浏览器。

(后续)

我已经验证了XML输出确实如宣传的那样有效,我在我的DreamHost账户上上传了以下简单的Python CGI,地址是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/{username}/logs/{sitename}/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

撰写回答