Ich versuche, diese Zeichenfolge vor dem Absenden mit einem URL zu codieren.
queryString = 'eventName=" + evt.fields["eventName"] + "&' + 'eventDescription=' + evt.fields["eventDescription"];
James
Ich versuche, diese Zeichenfolge vor dem Absenden mit einem URL zu codieren.
queryString = 'eventName=" + evt.fields["eventName"] + "&' + 'eventDescription=' + evt.fields["eventDescription"];
Ricky Sahu
Was Sie suchen, ist urllib.quote_plus
:
safe_string = urllib.quote_plus('string_of_characters_like_these:$#@=?%^Q^$')
#Value: 'string_of_characters_like_these%3A%24%23%40%3D%3F%25%5EQ%5E%24'
In Python 3 ist die urllib
Paket wurde in kleinere Komponenten zerlegt. Sie werden verwenden urllib.parse.quote_plus
(beachten Sie das parse
untergeordnetes Modul)
import urllib.parse
safe_string = urllib.parse.quote_plus(...)
Vielen Dank! In meinem Fall muss ich jedoch Folgendes angeben: import urllib.parse ... urllib.parse.quote_plus(query)
– ivkremer
2. September 2014 um 11:53 Uhr
Sehr gut, aber warum wird Unicode nicht verwendet? Wenn die URL-Zeichenfolge Unicode ist, muss ich sie in UTF-8 codieren. Gibt es eine andere Möglichkeit, dies zu tun?
– Karl Dönitz
6. Februar 2015 um 6:55 Uhr
Das funktioniert großartig, aber ich konnte nicht auf einige Online-Dienste (REST) zugreifen, bis ich diesen Parameter safe=’;/?:@&=+$,’ hinzugefügt habe.
– Rowyko
29. Mai 2015 um 14:56 Uhr
python3 -c "import urllib.parse, sys; print(urllib.parse.quote_plus(sys.argv[1])) "string to encode"
für einen Einzeiler auf der Kommandozeile
– Amos Josua
8. Mai 2019 um 12:19 Uhr
@AmosJoshua Ich glaube, du hast ein doppeltes Anführungszeichen verpasst "
direkt nach den doppelten runden schließenden Klammern ))
es sollte sein: python3 -c "import urllib.parse, sys; print(urllib.parse.quote_plus(sys.argv[1]))" "string to encode"
– lgespeed
2. November 2021 um 19:04 Uhr
bgporter
Sie müssen Ihre Parameter übergeben urlencode()
entweder als Mapping (dict) oder als Folge von 2-Tupeln, wie:
>>> 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
:
>>> urllib.parse.urlencode(f)
eventName=myEvent&eventDescription=cool+event
Beachten Sie, dass dies der Fall ist nicht URL-Kodierung im üblichen Sinne durchführen (siehe Ausgabe). Für diese Verwendung urllib.parse.quote_plus
.
„Beachten Sie, dass urllib.urlencode nicht immer ausreicht. Das Problem ist, dass einige Dienste sich um die Reihenfolge der Argumente kümmern, die verloren geht, wenn Sie das Wörterbuch erstellen. Für solche Fälle ist urllib.quote_plus besser, wie Ricky vorgeschlagen hat. “
– Blairg23
17. August 2015 um 21:35 Uhr
Technisch gesehen ist das ein Fehler in den Diensten, oder?
– Holdenweb
19. August 2015 um 9:52 Uhr
und wie würde man dies tun, wenn Sie nur eine Zeichenfolgen-URL sicher machen möchten, ohne eine vollständige Abfrageargumentzeichenfolge zu erstellen?
– Mike „Pomax“ Kamermans
7. Juni 2016 um 2:14 Uhr
@Mike’Pomax’Kamermans – siehe zB stackoverflow.com/questions/12082314/… oder Rickys Antwort auf diese Frage.
– bgporter
7. Juni 2016 um 12:12 Uhr
@bk0 Es scheint, dass Ihre Methode nur für Wörterbücher und nicht für Zeichenfolgen gültig ist.
– JD Gamboa
2. Februar 2018 um 22:23 Uhr
Barney Szabolcs
Versuchen Anfragen anstelle von urllib und Sie brauchen sich nicht um urlencode zu kümmern!
import requests
requests.get('http://youraddress.com', params=evt.fields)
BEARBEITEN:
Wenn Sie brauchen geordnete Name-Wert-Paare oder mehrere Werte für einen Namen, dann legen Sie Parameter wie folgt fest:
params=[('name1','value11'), ('name1','value12'), ('name2','value21'), ...]
anstatt ein Wörterbuch zu verwenden.
Dies behandelt nicht das Problem der Reihenfolge der Name-Wert-Paare, außerdem erfordert dies die Erlaubnis, externe Bibliotheken zu installieren, die für das Projekt möglicherweise nicht machbar sind.
– dreftymac
6. September 2013 um 2:10 Uhr
Ich habe den minimalen Code gepostet, der für das OP funktionieren würde. Das OP hat keine bestellten Paare angefordert, aber es ist auch machbar, siehe mein Update.
– Barney Szabolcs
10. September 2013 um 8:02 Uhr
@dreftymac: Dies betrifft die Bestellung (obwohl dies nicht Teil der Frage war). Bitte lesen Sie meine aktualisierte Antwort.
– Barney Szabolcs
25. November 2013 um 20:26 Uhr
dreftymac
Das Folgende ist eine vollständige Lösung, einschließlich des Umgangs mit einigen Fallstricken.
### ********************
## init python (version 2.7.2 )
import urllib
### ********************
## first setup a dictionary of name-value pairs
dict_name_value_pairs = {
"bravo" : "True != False",
"alpha" : "http://www.example.com",
"charlie" : "hello world",
"delta" : "1234567 !@#$%^&*",
"echo" : "[email protected]",
}
### ********************
## setup an exact ordering for the name-value pairs
ary_ordered_names = []
ary_ordered_names.append('alpha')
ary_ordered_names.append('bravo')
ary_ordered_names.append('charlie')
ary_ordered_names.append('delta')
ary_ordered_names.append('echo')
### ********************
## show the output results
if('NO we DO NOT care about the ordering of name-value pairs'):
queryString = urllib.urlencode(dict_name_value_pairs)
print queryString
"""
echo=user%40example.com&bravo=True+%21%3D+False&delta=1234567+%21%40%23%24%25%5E%26%2A&charlie=hello+world&alpha=http%3A%2F%2Fwww.example.com
"""
if('YES we DO care about the ordering of name-value pairs'):
queryString = "&".join( [ item+'='+urllib.quote_plus(dict_name_value_pairs[item]) for item in ary_ordered_names ] )
print queryString
"""
alpha=http%3A%2F%2Fwww.example.com&bravo=True+%21%3D+False&charlie=hello+world&delta=1234567+%21%40%23%24%25%5E%26%2A&echo=user%40example.com
"""
ich bevorzuge urllib.parse.quote()
mich da es verwendet %20
statt +
.
– binki
29. September 2015 um 20:43 Uhr
Versuche dies:
urllib.pathname2url(stringToURLEncode)
urlencode
funktioniert nicht, weil es nur auf Wörterbüchern funktioniert. quote_plus
hat nicht die richtige Ausgabe erzeugt.
ich bevorzuge urllib.parse.quote()
mich da es verwendet %20
statt +
.
– binki
29. September 2015 um 20:43 Uhr
Adam
Beachten Sie, dass urllib.urlencode nicht immer ausreicht. Das Problem ist, dass einige Dienste sich um die Reihenfolge der Argumente kümmern, die beim Erstellen des Wörterbuchs verloren geht. Für solche Fälle ist urllib.quote_plus besser, wie Ricky vorgeschlagen hat.
Es funktioniert gut und behält die Reihenfolge bei, wenn Sie eine Liste von Tupeln übergeben: >>> import urllib >>> urllib.urlencode([('name', 'brandon'), ('uid', 1000)]) 'name=brandon&uid=1000'
– Brandon Rhodes
16. März 2017 um 21:07 Uhr