2009-05-24 41 views
0

我有一個應用程序應該傳達狀態信息到服務器。這些信息實際上是一個帶有字符串鍵的大型字典。Python:發送一個大字典到服務器

服務器將運行基於Turbogears的Web應用程序,因此調用的服務器端方法接受任意數量的關鍵字參數。

除了實際數據之外,還應該發送一些與認證(id,password ..)有關的數據。一種方法是簡單地urlencode包含所有這些的大型字典,並將其發送到服務器的請求中。

urllib2.urlencode(dataPlusId) 

但實際上,進行身份驗證和接受數據集的方法並不需要對數據有太多瞭解。數據可以透明地傳輸和接受,並轉交給另一種處理數據的方法。

所以我的問題是:什麼是一個大的數據字典傳輸到一般的服務器的最佳方式是什麼?而在這個特定的情況下,在這裏處理身份驗證的最佳方式是什麼?

回答

3

我認爲最好的辦法是將編碼數據以適當的傳輸格式(你不應該使用的泡菜,因爲它不保存,但它可以是二進制),並將其轉移爲multipart post request

我做什麼不知道你是否可以使用repoze.who來工作。如果一步不支持登錄和函數調用,您可能需要自己驗證憑據。

如果你可以用xml包裝你的數據,你也可以使用XML-RPC

2

爲什麼不將字典序列化爲文件並上傳文件?這樣,服務器就可以將對象讀回字典中。

1

您是否嘗試過在數據上使用pickle?

+1

出於安全原因,您不應通過網絡傳輸醃漬物體 – ebo 2009-05-24 15:03:07

2

做一個你的Python數據的POST(使用其他答案中建議的二進制文件)並使用你的網絡服務器處理安全性。 Apache和Microsoft服務器都可以使用各種方法(SSL客戶端證書,密碼,系統帳戶等)進行身份驗證...

對文本或XML進行序列化/反序列化可能是矯枉過正,如果你只是想要再次將其翻回字典)。

4

如果安全是一個問題,我同意所有關於避免泡菜的問題(如果發件人在數據未被取消之前獲得認證,那麼我同意所有的答案 - 但是,當安全問題出現時,兩個級別的防禦可能會比一);在這種情況下,JSON常常有幫助(或者,XML,如果沒有別的東西會這樣做......)。

正如SpliFF所建議的那樣,理想情況下,身份驗證應留給網絡服務器,並且SSL(即HTTPS)通常適用於此目的。如果這是不可行的,但讓客戶端和服務器共享一個「祕密」是可行的,那麼以加密形式發送序列化的字符串可能是最好的。

2

我個人在兩端都使用SimpleJSON,只是將「文件」(它實際上只是一個流)發佈爲多部分數據。

但這就是我。還有其他選項。