我刚刚检查了我的网站空间,它的签名显示: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 执行这三个步骤吗?
最佳答案
首先,签名没有列出 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 方面,您通常会检查查询字符串以查看请求是否包含客户端想要的回调函数的特定名称,或者只是默认为“callback”
print "callback(%s);" % json_data
# callback({"text": "FOO"});
返回的是 JSONP 类型的响应,因为当客户端收到它时,会为客户端执行回调。
最后,让我补充一点,您应该知道 python cgi 脚本需要为每个请求(甚至来自同一客户端的重复请求)启动一个全新的 python 解释器进程。在负载增加的情况下,这很容易使服务器不堪重负。因此,人们通常选择 wsgi 路线(apache 中的 mod_wsgi)。 wsgi 允许持久应用程序继续运行,并处理持续的请求。
关于python - 如何在我的网站空间上使用 python 执行 JSONP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11089837/