2013-08-01 124 views
0

如果之前已經解決了這個問題,請原諒我,但是如何組織在python應用程序(套接字)中的客戶端和服務器之間交換的數據?組織在客戶端服務器之間發送的數據

比方說,我有一些內容我要送 - 字符串,元組,http://stardict.sourceforge.net/Dictionaries.php下載:

"hello world", (1, 2, 3), {"k": "v"} 

我目前做的是我只是一切都轉換爲字符串 - 接收後發送之前打電話repr()eval()。這顯然有點多餘。

我應該如何發送這些數據塊?有一個約定嗎?首選格式?我如何壓縮它?

+1

如果你正在尋找一個術語到谷歌,這是'序列化',python有'pickle'用於python-> python交換和'json'用於python-> world交換。 – roippi

回答

1

最簡單的方法是pickle他們在客戶端,並取消他們在服務器端。但是,需要確保數據來自可信來源,因爲可能會強制unpickle執行任意代碼。確保你使用cPickle來獲得C語言的實現。

1

你應該nevereval() data from an untrusted source,這意味着你不應該通過eval()任何東西到達一個不安全的網絡連接(或者你不能絕對確定另一端的實體是誰或它說的是什麼)。

這裏明顯的解決方案是在一端對encode the data as JSON進行解碼,並在另一端進行解碼(除非您有特殊的性能要求,例如要求高度壓縮的格式,例如msgpack)。

3

JSON是你在找什麼。如果你有一個對象,並導入JSON功能:

from json import dumps, loads 

可以使用dumps(obj)編碼成JSON和loads(str)以JSON字符串轉換回對象。例如:

dumps([[1,2,3],{"a":"b", "c":"d"}]) 

產生'[[1, 2, 3], {"a": "b", "c": "d"}]'

loads('[[1, 2, 3], {"a": "b", "c": "d"}]') 

產生[[1, 2, 3], {u'a': u'b', u'c': u'd'}]

相關問題