Как выполнить URL-кодирование строки запроса в Python?
Я пытаюсь закодировать эту строку с помощью функции urlencode перед отправкой. Вот код, который я использую:
queryString = 'eventName=' + evt.fields["eventName"] + '&' + 'eventDescription=' + evt.fields["eventDescription"];
Однако, я не уверен в правильности кодирования специальных символов в строке queryString
. Как я могу правильно выполнить urlencode для этой строки, чтобы избежать проблем с передачей данных?
5 ответ(ов)
Обратите внимание, что urllib.urlencode
не всегда решает задачу. Проблема в том, что некоторые сервисы учитывают порядок аргументов, который теряется при создании словаря. Для таких случаев лучше использовать urllib.quote_plus
, как предложил Ри́ки.
Попробуйте использовать следующий код:
import urllib
urllib.pathname2url(stringToURLEncode)
Метод urlencode
не сработает, так как он предназначен только для работы со словарями. Кроме того, quote_plus
не всегда дает нужный результат в данном случае.
В Python 3 это сработало для меня:
import urllib
urllib.parse.quote(query)
Функция urllib.parse.quote()
используется для кодирования строки в формат, подходящий для передачи в URL, заменяя специальные символы на соответствующие им percent-encoded значения. Убедитесь, что вы импортируете модуль urllib.parse
, так как в Python 3 он находится в этом подмодуле.
В вашем коде вы используете функцию urllib.parse.quote()
для кодирования строки URL. Это полезно, когда вам нужно безопасно передавать данные через URL, так как некоторые символы могут вызвать проблемы.
В данном случае вы передаёте строку query
, содержащую специальные символы, такие как ö
и @
. Функция вернёт закодированную версию строки, заменяя специальные символы их процентными кодами.
Вот результат вашего кода:
import urllib.parse
query = 'Hellö Wörld@Python'
encoded_query = urllib.parse.quote(query) # возвращает 'Hell%C3%B6%20W%C3%B6rld%40Python'
print(encoded_query)
Обратите внимание, что пробелы будут заменены на %20
, а буквы с диакритическими знаками, такие как ö
, будут заменены на их соответствующие коды, например, ö
становится %C3%B6
. Таким образом, строка Hellö Wörld@Python
будет закодирована как Hell%C3%B6%20W%C3%B6rld%40Python
, что делает её безопасной для использования в URL.
Для будущихReference (например, для Python 3):
Вы можете использовать модуль urllib
для кодирования строк URL. В вашем примере используется функция pathname2url
, которая преобразует строку запроса в подходящий формат для URL.
Пример кода:
import urllib.request as req
query = 'eventName=theEvent&eventDescription=testDesc'
encoded_query = req.pathname2url(query)
print(encoded_query) # 'eventName%3DtheEvent%26eventDescription%3DtestDesc'
Вывод покажет закодированную строку, в которой символы =
и &
заменены на %3D
и %26
соответственно. Это полезно для передачи параметров в URL запросах, так как гарантирует, что специальные символы будут корректно интерпретированы.
Как скачать файл по HTTP?
Сохранить график в файл изображения вместо его отображения
Преобразование списка словарей в DataFrame pandas
Как отсортировать список/кортеж списков/кортежей по элементу на заданном индексе
Что такое Python egg?