Próbuję urlencode ten ciąg przed przesłaniem.
queryString = 'eventName=' + evt.fields["eventName"] + '&' + 'eventDescription=' + evt.fields["eventDescription"];
Musisz przekazać swoje parametry urlencode()
jako mapowanie (dict) lub sekwencję 2-krotek, takich jak:
>>> import urllib
>>> f = { 'eventName' : 'myEvent', 'eventDescription' : 'cool event'}
>>> urllib.urlencode(f)
'eventName=myEvent&eventDescription=cool+event'
Python 3 lub nowszy
Posługiwać się:
>>> urllib.parse.urlencode(f)
eventName=myEvent&eventDescription=cool+event
Zauważ, że ten sposób nie zrobić url kodowania w powszechnie używanych zmysł (spojrzenie na wyjściu). Do tego celu urllib.parse.quote_plus
.
Python 2
To czego szukasz to
urllib.quote_plus
:Python 3
W Pythonie 3
urllib
pakiet został podzielony na mniejsze komponenty. Użyjeszurllib.parse.quote_plus
(zwróć uwagę naparse
moduł potomny)źródło
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"
dla jednego linijki w wierszu poleceńWypróbuj żądania zamiast urllib i nie musisz przejmować się urlencode!
EDYTOWAĆ:
Jeśli potrzebujesz uporządkowanych par nazwa-wartość lub wielu wartości dla nazwy, ustaw następujące parametry:
zamiast używać słownika.
źródło
Kontekst
Problem
Rozwiązanie
Pułapki
Przykład
Poniżej znajduje się kompletne rozwiązanie, w tym sposób radzenia sobie z niektórymi pułapkami.
źródło
Python 3:
urllib.parse.quote_plus (string, safe = '', kodowanie = brak, błędy = brak)
źródło
urllib.parse.quote()
siebie, ponieważ używa%20
raczej niż+
.Spróbuj tego:
urlencode
nie będzie działać, ponieważ działa tylko w słownikach.quote_plus
nie wygenerował prawidłowego wyniku.źródło
my string
sięmy%20string
. Twoje rozwiązanie działa jak urok!%20
zamiast+
. DziękiZauważ, że urllib.urlencode nie zawsze załatwia sprawę. Problem polega na tym, że niektóre usługi dbają o kolejność argumentów, które gubią się podczas tworzenia słownika. W takich przypadkach lepiej jest urllib.quote_plus, jak sugerował Ricky.
źródło
>>> import urllib >>> urllib.urlencode([('name', 'brandon'), ('uid', 1000)]) 'name=brandon&uid=1000'
W Pythonie 3 to zadziałało ze mną
źródło
dla przyszłych odniesień (np .: dla python3)
źródło
'c:/2 < 3'
systemu Windows to'///C://2%20%3C%203'
. Chcę czegoś, co po prostu wyjdzie'c:/2%20%3C%203'
.Do użytku w skryptach / programach, które muszą obsługiwać zarówno Python 2, jak i 3, moduł sześciu udostępnia funkcje cytowania i urlencode:
źródło
Jeśli funkcja urllib.parse.urlencode () powoduje błędy, wypróbuj moduł urllib3.
Składnia jest następująca:
źródło
Inną rzeczą, o której jeszcze nie wspomniano, jest
urllib.urlencode()
zakodowanie pustych wartości w słowniku jako ciąguNone
zamiast braku tego parametru. Nie wiem, czy jest to zwykle pożądane, czy nie, ale nie pasuje do mojego przypadku użycia, dlatego muszę go użyćquote_plus
.źródło
Dla urllib3 w Pythonie 3 działa poprawnie, możesz użyć następujących instrukcji zgodnie z oficjalnymi dokumentami :
źródło