Как urlencode строку запроса в Python?



Я пытаюсь urlencode эту строку, прежде чем отправить.



queryString = 'eventName=' + evt.fields["eventName"] + '&' + 'eventDescription=' + evt.fields["eventDescription"]; 
1029   12  

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(...)

контекст

  • Python (версия 2.7.2 )

попробовать запросы вместо 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 не произвел правильный вывод.

в Python 3, это работало со мной

import urllib

urllib.parse.quote(query)

для будущих ссылок (например: для 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

    Ничего не найдено.