nc-blog 首页农码生涯

Python客户端POST复杂数据结构到web服务端

日期: 2010-05-21, 18:02   共 18,391 次阅读

昨晚要解决python写的客户端向web服务端提交一个较复杂的数据结构(多层的词典),原本打算在客户端把数据结构生成XML然后POST给web服务端,然后由服务端的php脚本解析XML,不过想想转为XML,再解析XML的过程,就很繁琐,头疼。后来想未必要用XML(不需要通用,却平白增加了网络传输量),可以自己定义一个格式来传送,不过,始终因为这个数据结构比较复杂,光来回转换这个过程就觉得麻烦,更不用说传送过程中出错,服务端如何校验数据正确性等细节问题了。

后来灵光一闪,想到为什么服务端不也用Python来写呢?因为Python的pickle直接可以把整个词典对象(不论多复杂)序列化,然后POST给服务端的Python脚本来反序列化,直接就可以在服务端得到这个词典对象了。于是在web服务器(nginx)上装了flup,spawn-fcgi,以及轻巧的web.py框架(尝试了一下django,感觉太庞大、复杂了,不适合这个简单应用),然后只要几行代码就搞定了(为了减小网络传输,用zlib把序列化了的对象再压缩一下):

客户端打包:

data = zlib.compress(pickle.dumps(dict))
params = urllib.urlencode({'s':data})
...  # POST 数据

服务端解包:

class xxapp:
	def POST(self):
		data = urlparse.parse_qs(web.data())
		dict = pickle.loads(zlib.decompress(data['s'][0]))
                ...
简短地址:http://ncblog.net/706/
«
»
评论
某人 @ 2010-05-21 19:57 留言:
很强大! 恭喜egg pain教主变成python控! :mrgreen:

› Matt @ 2010-05-21 22:03 留言:
xmlrpc 啊,连web.py都不用

Trackback url | Rss 2.0