2

我刚刚检查了我的网络空间,它的签名说:Apache/2.2.9 (Debian) mod_python/3.3.1 Python/2.5.2 mod_ssl/2.2.9 OpenSSL/0.9.8g

这让我希望 Python 能以某种方式得到支持。为什么python被列出两次?mod_python/3.3.1 和 Python/2.5.2 ???

我的网站空间上有一个 cgi-bin 文件夹。

我想做的事:我需要进行跨站点调用以从服务器获取一些文本数据。文本数据不是 JSON,但我想我应该将其转换为 JSON(或者是否可以选择在没有 JSON 的情况下进行跨站点?)

python 脚本获取一些 JSONP 的请求。根据请求(我想我应该以某种方式解析 URL),python 脚本将从网络服务器加载请求的文本数据文件并将其包装在一些 JSON 中并返回它。

有人可以告诉我如何在我的网络空间上使用 python 完成这三个步骤吗?

4

1 回答 1

2

首先,签名没有两次列出 python。它首先列出了mod_python的版本,这是一个 Apache Web 服务器插件,然后列出了系统上 python 解释器的版本。

python cgi 模块- 这确实是一种编写 python 服务器代码的低效方法,但就是这样。最终,您应该考虑使用众多令人惊叹的 Python Web 框架之一。但是,使用 cgi 模块,您的响应将始终以此开头:

print 'Content-Type: application/json\n\n'

您的 python 脚本将通过 HTTP 请求在服务器上运行。在该脚本中,您将检查请求并根据 URL 值或查询字符串确定要提供的数据。

至少您只需将返回值包装在基本的 JSON 数据结构中。文本数据本身可以只是一个字符串:

import json
text_data = "FOO"
json_data = json.dumps({'text': text_data})
print json_data
# {"text": "FOO"}

对于 JSONP 方面,您通常会检查查询字符串以查看请求是否包含客户端想要的回调函数的特定名称,或者只是默认为“回调”

print "callback(%s);" % json_data
# callback({"text": "FOO"});

返回这将是一个 JSONP 类型的响应,因为当客户端收到它时,会为客户端执行回调。

最后,让我补充一点,您应该知道,python cgi 脚本将需要为每个请求(甚至来自同一客户端的重复请求)启动一个全新的 python 解释器进程。这很容易使负载增加的服务器不堪重负。出于这个原因,人们通常选择 wsgi 路由(apache 中的mod_wsgi)。wsgi 允许持久应用程序继续运行,并处理正在进行的请求。

于 2012-06-18T20:02:38.967 回答