Saya mencoba urlencode string ini sebelum saya kirim.
queryString = 'eventName=' + evt.fields["eventName"] + '&' + 'eventDescription=' + evt.fields["eventDescription"];
Anda perlu memasukkan parameter Anda urlencode()
sebagai pemetaan (dict), atau urutan 2-tupel, seperti:
>>> import urllib
>>> f = { 'eventName' : 'myEvent', 'eventDescription' : 'cool event'}
>>> urllib.urlencode(f)
'eventName=myEvent&eventDescription=cool+event'
Python 3 atau lebih tinggi
Menggunakan:
>>> urllib.parse.urlencode(f)
eventName=myEvent&eventDescription=cool+event
Perhatikan bahwa ini tidak melakukan penyandian url dalam arti yang umum digunakan (lihat outputnya). Untuk itu gunakan urllib.parse.quote_plus
.
Python 2
Apa yang Anda cari adalah
urllib.quote_plus
:Python 3
Dalam Python 3,
urllib
paket telah dipecah menjadi komponen yang lebih kecil. Anda akan menggunakanurllib.parse.quote_plus
(perhatikanparse
modul anak)sumber
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"
untuk satu liner di baris perintahCoba permintaan alih-alih urllib dan Anda tidak perlu repot dengan urlencode!
EDIT:
Jika Anda membutuhkan pasangan nama-nilai yang dipesan atau beberapa nilai untuk sebuah nama, maka tetapkan params seperti ini:
alih-alih menggunakan kamus.
sumber
Konteks
Masalah
Larutan
Perangkap
Contoh
Berikut ini adalah solusi lengkap, termasuk bagaimana menghadapi beberapa jebakan.
sumber
Python 3:
urllib.parse.quote_plus (string, safe = '', encoding = Tidak ada, kesalahan = Tidak ada)
sumber
urllib.parse.quote()
diri saya sendiri karena menggunakan%20
daripada+
.Coba ini:
urlencode
tidak akan berfungsi karena hanya berfungsi pada kamus.quote_plus
tidak menghasilkan output yang benar.sumber
my string
kemy%20string
. Solusi Anda bekerja seperti pesona untuk itu!%20
alih-alih+
. Terima kasihPerhatikan bahwa urllib.urlencode tidak selalu berhasil. Masalahnya adalah bahwa beberapa layanan peduli dengan urutan argumen, yang hilang ketika Anda membuat kamus. Untuk kasus seperti itu, urllib.quote_plus lebih baik, seperti yang disarankan Ricky.
sumber
>>> import urllib >>> urllib.urlencode([('name', 'brandon'), ('uid', 1000)]) 'name=brandon&uid=1000'
Dalam Python 3, ini berhasil dengan saya
sumber
untuk referensi di masa mendatang (mis: untuk python3)
sumber
'c:/2 < 3'
pada Windows adalah'///C://2%20%3C%203'
. Saya ingin sesuatu yang hanya keluaran'c:/2%20%3C%203'
.Untuk digunakan dalam skrip / program yang perlu mendukung python 2 dan 3, modul enam menyediakan fungsi quote dan urlencode:
sumber
Jika urllib.parse.urlencode () memberi Anda kesalahan, maka Coba modul urllib3.
The sintaks adalah sebagai berikut:
sumber
Hal lain yang mungkin belum disebutkan adalah bahwa
urllib.urlencode()
akan menyandikan nilai kosong dalam kamus sebagaiNone
ganti parameter yang tidak ada. Saya tidak tahu apakah ini biasanya diinginkan atau tidak, tetapi tidak cocok dengan kasus penggunaan saya, maka saya harus menggunakannyaquote_plus
.sumber
Untuk Python 3 urllib3 berfungsi dengan baik, Anda dapat menggunakan sebagai berikut sesuai dokumen resmi :
sumber