8

Как выполнить URL-кодирование строки запроса в Python?

2

Я пытаюсь закодировать эту строку с помощью функции urlencode перед отправкой. Вот код, который я использую:

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

Однако, я не уверен в правильности кодирования специальных символов в строке queryString. Как я могу правильно выполнить urlencode для этой строки, чтобы избежать проблем с передачей данных?

5 ответ(ов)

0

Обратите внимание, что urllib.urlencode не всегда решает задачу. Проблема в том, что некоторые сервисы учитывают порядок аргументов, который теряется при создании словаря. Для таких случаев лучше использовать urllib.quote_plus, как предложил Ри́ки.

0

Попробуйте использовать следующий код:

import urllib

urllib.pathname2url(stringToURLEncode)

Метод urlencode не сработает, так как он предназначен только для работы со словарями. Кроме того, quote_plus не всегда дает нужный результат в данном случае.

0

В Python 3 это сработало для меня:

import urllib

urllib.parse.quote(query)

Функция urllib.parse.quote() используется для кодирования строки в формат, подходящий для передачи в URL, заменяя специальные символы на соответствующие им percent-encoded значения. Убедитесь, что вы импортируете модуль urllib.parse, так как в Python 3 он находится в этом подмодуле.

0

В вашем коде вы используете функцию 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.

0

Для будущих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 запросах, так как гарантирует, что специальные символы будут корректно интерпретированы.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь