Ich versuche, diese Zeichenfolge vor dem Senden zu urlencodieren.
queryString = 'eventName=' + evt.fields["eventName"] + '&' + 'eventDescription=' + evt.fields["eventDescription"];
Sie müssen Ihre Parameter urlencode()
entweder als Mapping (Diktat) oder als Folge von 2-Tupeln übergeben, z.
>>> import urllib
>>> f = { 'eventName' : 'myEvent', 'eventDescription' : 'cool event'}
>>> urllib.urlencode(f)
'eventName=myEvent&eventDescription=cool+event'
Python 3 oder höher
Verwenden:
>>> urllib.parse.urlencode(f)
eventName=myEvent&eventDescription=cool+event
Beachten Sie, dass dies nicht nicht url tun kodiert , in dem üblicherweise verwendeten Sinne (Blick auf der Ausgabe). Für diesen Gebrauch urllib.parse.quote_plus
.
Python 2
Was Sie suchen ist
urllib.quote_plus
:Python 3
In Python 3 wurde das
urllib
Paket in kleinere Komponenten aufgeteilt. Sie verwendenurllib.parse.quote_plus
(beachten Sie dasparse
untergeordnete Modul)quelle
import urllib.parse ... urllib.parse.quote_plus(query)
python3 -c "import urllib.parse, sys; print(urllib.parse.quote_plus(sys.argv[1])) "string to encode"
für einen Einzeiler auf der KommandozeileProbieren Sie Anfragen anstelle von urllib aus und Sie müssen sich nicht um urlencode kümmern!
BEARBEITEN:
Wenn Sie geordnete Name-Wert-Paare oder mehrere Werte für einen Namen benötigen, legen Sie folgende Parameter fest:
anstatt ein Wörterbuch zu verwenden.
quelle
Kontext
Problem
Lösung
Tücken
Beispiel
Das Folgende ist eine vollständige Lösung, einschließlich des Umgangs mit einigen Fallstricken.
quelle
Python 3:
urllib.parse.quote_plus (Zeichenfolge, safe = '', Kodierung = Keine, Fehler = Keine)
quelle
urllib.parse.quote()
mich selbst, da es%20
eher verwendet als+
.Versuche dies:
urlencode
funktioniert nicht, weil es nur in Wörterbüchern funktioniert.quote_plus
hat nicht die richtige Ausgabe erzeugt.quelle
my string
zumy%20string
. Ihre Lösung funktioniert wie ein Zauber dafür!%20
statt+
. Vielen DankBeachten Sie, dass der urllib.urlencode nicht immer den Trick macht. Das Problem ist, dass sich einige Dienste um die Reihenfolge der Argumente kümmern, die beim Erstellen des Wörterbuchs verloren gehen. In solchen Fällen ist urllib.quote_plus besser, wie Ricky vorgeschlagen hat.
quelle
>>> import urllib >>> urllib.urlencode([('name', 'brandon'), ('uid', 1000)]) 'name=brandon&uid=1000'
In Python 3 hat das bei mir funktioniert
quelle
für zukünftige Referenzen (zB für python3)
quelle
'c:/2 < 3'
unter Windows ist'///C://2%20%3C%203'
. Ich möchte etwas, das nur ausgegeben wird'c:/2%20%3C%203'
.Für die Verwendung in Skripten / Programmen, die sowohl Python 2 als auch Python 3 unterstützen müssen, bietet das Sechs-Modul Anführungszeichen- und Urlencode-Funktionen:
quelle
Wenn der urllib.parse.urlencode () Fehler anzeigt, probieren Sie das urllib3-Modul aus.
Die Syntax lautet wie folgt:
quelle
Eine andere Sache, die möglicherweise noch nicht erwähnt wurde, ist, dass
urllib.urlencode()
leere Werte im Wörterbuch als Zeichenfolge codiert werden,None
anstatt dass dieser Parameter nicht vorhanden ist. Ich weiß nicht, ob dies normalerweise erwünscht ist oder nicht, passt aber nicht zu meinem Anwendungsfall, daher muss ich es verwendenquote_plus
.quelle
Für Python 3 funktioniert urllib3 ordnungsgemäß. Sie können Folgendes gemäß den offiziellen Dokumenten verwenden :
quelle