2010-02-03 6 views
7

Ich dachte, dass ein Post alle Informationen in HTTP-Headern gesendet, wenn Sie Post verwendet (ich bin nicht gut informiert zu diesem Thema offensichtlich), so bin ich verwirrt, warum Sie die Daten zu einem key=value&key2=value2-Format urlencode() müssen. Wie funktioniert das Formatierung ins Spiel kommen, wenn POST ?:Python: urllib2.urlopen (URL, Daten) Warum müssen Sie urllib.urlencode() die Daten?

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

aber

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

Antwort

9

Es hängt mit dem Header "Content-Type" zusammen: Der Client muss eine Vorstellung davon haben, wie die POST-Daten codiert sind, oder wie würde er wissen, wie er sie dekodiert?

Die Standardmethode hierfür ist application/x-www-form-urlencoded Codierungsformat.

Nun, wenn die Frage ist "warum müssen wir verschlüsseln?", Lautet die Antwort "weil wir in der Lage sein müssen, die Nutzlast im HTTP-Container abzugrenzen".

2

Daten im Standard application/x-www-form-urlencoded-Format vorliegen. urlencode konvertiert Ihre Argumente in eine URL-codierte Zeichenfolge.

Verwandte Themen