12 ответов:
вы должны передать параметры в
urlencode()как либо отображение (dict), либо последовательность 2-кортежей, например:>>> import urllib >>> f = { 'eventName' : 'myEvent', 'eventDescription' : 'cool event'} >>> urllib.urlencode(f) 'eventName=myEvent&eventDescription=cool+event'на Python 3 или выше
использование:
>>> urllib.parse.urlencode(f) eventName=myEvent&eventDescription=cool+event
Python 2
то, что вы ищете-это
urllib.quote_plus:>>> urllib.quote_plus('string_of_characters_like_these:$#@=?%^Q^$') 'string_of_characters_like_these%3A%24%23%40%3D%3F%25%5EQ%5E%24'Python 3
в Python 3,
urllibпакет был разбит на более мелкие компоненты. Вы будете использоватьurllib.parse.quote_plus(обратите внимание наparseмодуль ребенком)import urllib.parse urllib.parse.quote_plus(...)
попробовать запросы вместо urllib и вам не нужно беспокоиться с urlencode!
import requests requests.get('http://youraddress.com', params=evt.fields)EDIT:
Если вам нужно упорядоченные пары имя-значение или несколько значений для имени, затем установите параметры следующим образом:
params=[('name1','value11'), ('name1','value12'), ('name2','value21'), ...]вместо использования словаря.
обратите внимание, что urllib.urlencode не всегда делает трюк. Проблема в том, что некоторые сервисы заботятся о порядок аргументов, который теряется при создании словаря. Для таких случаев, urllib.quote_plus лучше, как предложил Рикки.
попробуйте это:
urllib.pathname2url(stringToURLEncode)
urlencodeне будет работать, потому что он работает только на словарях.quote_plusне произвел правильный вывод.
для будущих ссылок (например: для python3)
>>> import urllib.request as req >>> query = 'eventName=theEvent&eventDescription=testDesc' >>> req.pathname2url(query) >>> 'eventName%3DtheEvent%26eventDescription%3DtestDesc'
Если urllib.разбор.urlencode () дает вам ошибки , а затем попробуйте модуль urllib3 .
The синтаксис следующим образом :
import urllib3 urllib3.request.urlencode({"user" : "john" })
еще одна вещь, которая, возможно, не была упомянута уже это
urllib.urlencode()будет кодировать пустые значения в словаре в виде строкиNoneвместо того, чтобы этот параметр отсутствовал. Я не знаю, является ли это обычно желательным или нет, но не подходит для моего случая использования, поэтому я должен использоватьquote_plus.
Comments