如何在我的网站空间上使用python进行JSONP ..?

时间:2012-06-18 19:39:13

标签: python apache jsonp

我刚检查了我的网站空间,它的签名是: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脚本是从Web服务器加载请求的文本数据文件并将其包装在一些JSON中并返回它。

有人可以告诉我如何在我的网站空间中使用python执行这三个步骤吗?

1 个答案:

答案 0 :(得分:2)

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

python cgi module - 这实际上是编写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允许持久应用程序继续运行,并处理持续的请求。