2010-02-03 31 views
7

我認爲當你使用post(我沒有很好地告知這個主題明顯)時,一個帖子發送了所有HTTP頭信息,所以我很困惑你爲什麼必須將數據urlencode()成key=value&key2=value2格式。如何在使用POST?:當格式化開始發揮作用Python:urllib2.urlopen(url,data)爲什麼你需要urllib.urlencode()數據?

# Fail 
data = {'name': 'John Smith'} 
urllib2.urlopen(foo_url, data) 

# Success 
data = {'name': 'John Smith'} 
data = urllib.urlencode(data) 
urllib2.urlopen(foo_url, data) 

回答

9

它與「Content-Type」標題有關:客戶端必須知道POST數據是如何編碼的,否則它將如何知道如何解碼它?

這樣做的標準方式是通過application/x-www-form-urlencoded編碼格式。

現在,如果問題是「我們爲什麼需要編碼?」,答案是「因爲我們需要能夠描述HTTP容器中的有效載荷」。

2

數據必須在標準應用程序/ x-WWW窗體-urlencoded格式。 urlencode將您的參數轉換爲url編碼的字符串。