Wie gebe ich eine Python-Liste in der Post-Abfrage?

8

Ich möchte einige Zeichenfolgen in einer Liste in einem POST-Aufruf senden. zB:

%Vor%

Der Python-Code empfängt die Daten als eine einzelne Zeichenfolge (anstelle einer Liste von Zeichenfolgen). Wie poste ich es als eine Liste von Zeichenfolgen?

    
Mohit Ranka 08.12.2008, 12:28
quelle

8 Antworten

8

Es gibt keine "Liste von Zeichenfolgen" in einer URL (oder in praktisch allem in HTTP - wenn Sie mehrere Werte für dieselbe Kopfzeile angeben, werden sie in den meisten Web-App-Frameworks IME als einzelner Begrenzungswert ausgegeben) . Es ist nur eine einzige Saite. Ich schlage vor, dass Sie die Strings in irgendeiner Weise abgrenzen (z. B. durch Kommas getrennt) und dann am anderen Ende erneut auslesen.

    
Jon Skeet 08.12.2008, 12:35
quelle
5

TRY JSON (JavaScript Object Notation) ist im Python-Paket verfügbar. Finde es hier heraus: Ссылка

Sie können Ihre Liste zu einem in JSON dargestellten Array kodieren und an das Argument post anhängen. Später dekodiere es zurück zur Liste ...

    
yrcjaya 08.12.2008 13:13
quelle
2

Sprechen Sie darüber?

%Vor%     
S.Lott 08.12.2008 12:38
quelle
2

Es hängt von Ihrem Server ab, die eingehenden Argumente zu formatieren. Zum Beispiel, wenn zope eine Anfrage wie folgt bekommt: Ссылка

Sie können die IDs als Liste erhalten. Aber diese Funktion hängt vom Server ab. Wenn Ihr Server keine Art von Parsing und Validierung Ihrer Eingabe unterstützt, müssen Sie es selbst implementieren. Oder du benutzt zope.

    
do3cc 08.12.2008 13:15
quelle
2

Wenn die große Zeichenfolge, die Sie empfangen, nur begrenzt ist, können Sie versuchen, sie zu trennen. Siehe Strings teilen .

Um klarzustellen, Sie erhalten die begrenzte Liste der Strings, teilen Sie diese Liste in eine Python-Liste, und voila !, Sie haben eine Python-Liste ...

    
mepcotterell 08.12.2008 12:36
quelle
2

Wenn Sie sie nicht einfach mit einem Komma trennen können oder wollen, und Sie möchten sie in einer Liste schicken. Ich habe eine Liste von Zahlen, die ich weitergeben möchte und ich benutze einen PHP-Webservice am anderen Ende, ich möchte meinen Webservice nicht neu aufbauen, da ich ein allgemeines Multiselect-Element verwendet habe, das Zend Framework zur Verfügung gestellt hat.

Dieses Beispiel funktioniert gut für mich und meine kleinen ganzen Zahlen und es würde mit Ihren Strings, ich wirklich nicht die urllib ausführen. Zitat (e), ich mache nur eine str (s).

Importieren Sie urllib

%Vor%

Ihre Liste der Stiche:

%Vor%

Verknüpfen Sie die Liste der Strings mit 'post_data [] =', auch urlencode die Zeichenfolge

%Vor%

Beiträge zu Ссылка

%Vor%     
Joelbitar 15.01.2010 12:33
quelle
1

Daten, die an eine POST-Anweisung übergeben werden, werden (so weit ich das verstanden habe) als Schlüssel / Wert-Paare codiert, wobei die Anwendung / x-www-form-urlencoded encoding verwendet wird.

Also nehme ich an, dass Sie Ihre String-Liste als das folgende Dictionary darstellen:

%Vor%

Dann ist es genauso schwierig, es als Argument an POST zu übergeben, als die Dokumentation von urllib zu lesen.

%Vor%

Beachten Sie, dass Google für seine Suchanfragen kein POST verwendet, aber Sie werden den von Google gemeldeten Fehler sehen.

Wenn Sie WireShark beim Eingeben des obigen Codes ausführen, sehen Sie, dass die Daten des POST wie folgt übergeben werden:

%Vor%     
Philippe F 08.12.2008 14:55
quelle
0

Eine Datenstruktur wie django.utils.datastructures.MultiValueDict ist eine saubere Darstellung solche Daten. AFAIK bewahrt die Ordnung.

%Vor%

Django verwendet django.http.QueryDict (Unterklasse von MultiValueDict ) um eine Abfragezeichenfolge in Python-Primitive und zurück zu verwandeln.

%Vor%

Sie sollten diese Klassen kopieren und in Ihrem Projekt verwenden können. (Ich habe jedoch nicht alle Abhängigkeiten überprüft)

    
muhuk 08.12.2008 21:47
quelle

Tags und Links