2010-11-15 91 views
1

我正在嘗試使用urllib發送POST數據,但問題通常是您urlencode字段的字典,然後將其與您的請求一起發送。但是我必須發送給服務器的一些字段被命名爲完全相同的名稱,因此使用字典時,我最終會從字典中刪除大量數據,因爲您不能擁有兩個具有相同名稱的密鑰,並且不同的數據。Python urllib2發送POST數據

我有我的請求數據在正確的語法的字符串格式(例如,VAR =價值& VAR =數值& ......),我嘗試發送與我的urllib請求一起,但我得到一個錯誤的請求每次。在發送之前是否有任何其他方式對數據進行urlencode編碼,所以我沒有得到400?

+0

你確定400是由於POST數據格式,而不是其他(例如,用戶代理頭)? – SimonJ 2010-11-15 01:24:58

回答

6

urllib.urlencode()可以採取一個元組列表,讓您獲得一個參數指定多個值:

>>> urlencode([("var", "value"), ("var", "value2")]) 
'var=value&var=value2' 

或者使用地圖列表作爲值:

>>> p = {"var": ["value", "value2"], "var2": ["yetanothervalue"]} 
>>> urlencode([(k, v) for k, vs in p.items() for v in vs]) 
'var=value&var=value2&var2=yetanothervalue' 

你甚至可以允許列表字符串作爲值,但它變得不那麼簡潔:

>>> p = {"var": ["value", "value2"], "var2": "yetanothervalue"} 
>>> urlencode([(k, v) for k, vs in p.items() 
...  for v in isinstance(vs, list) and vs or [vs]]) 
'var=value&var=value2&var2=yetanothervalue'