Linux urlencode command line

Как urlencode данные для команды curl?

Я пытаюсь написать сценарий bash для тестирования, который принимает параметр и отправляет его через curl на веб-сайт. Мне нужно кодировать значение url, чтобы убедиться, что специальные символы обрабатываются правильно. Каков наилучший способ сделать это?

вот мой основной скрипт до сих пор:

30 ответов:

использовать curl —data-urlencode ; С man curl :

это публикует данные, похожие на другие —data параметры за исключением того, что это выполняет URL-кодирование. Чтобы быть CGI-совместимым, часть должна начинаться с имени, за которым следует разделитель и спецификация содержание.

посмотреть на странице для получения дополнительной информации.

для этого требуется curl 7.18.0 или новее (выпущен в январе 2008). Используйте curl -V чтобы проверить, какая версия у вас.

вы можете использовать его двумя способами:

вот соответствующая функция rawurldecode (), которая — со всей скромностью-потрясающая.

С помощью соответствующего набора теперь мы можем выполнить несколько простых тестов:

и если вы действительно чувствуете, что вам нужен внешний инструмент (ну, он будет идти намного быстрее, и может делать двоичных файлов и тому подобное. ) Я нашел это на моем Маршрутизатор OpenWRT.

где url_escape.sed был файл, который содержал следующие правила:

используйте Perl URI::Escape модуль uri_escape функция во второй строке вашего скрипта bash:

Edit: исправить проблемы с цитированием, как предложил Крис Джонсен в комментариях. Спасибо!

для полноты картины многие решения используют sed или awk только перевести специальный набор символов и, следовательно, довольно большой размер кода, а также не переводить другие специальные символы, которые должны быть закодированы.

безопасным способом urlencode было бы просто кодировать каждый байт — даже те, которые были бы разрешены.

Читайте также:  Как увидеть жесткий диск windows 10

xxd заботится здесь, что вход обрабатывается как байты, а не письмена.

xxd поставляется с пакетом vim-common в Debian, и я был просто в системе, где он не был установлен, и я не хотел его устанавливать. В altornative заключается в использовании hexdump из пакета bsdmainutils в Debian. Согласно следующему графику, bsdmainutils и vim-common должны иметь примерно равную вероятность быть установлено:

но все же вот версия, которая использует hexdump вместо xxd и позволяет избежать tr звоните:

Я нахожу его более читаемым в python:

тройка ‘ гарантирует, что одиночные кавычки в значении не повредит. urllib находится в стандартной библиотеке. Он работает для example для этого сумасшедшего (реального мира) url:

один из вариантов, может быть коряво, но просто:

вот однострочная версия, например (как предложено Бруно):

Я нашел следующий фрагмент кода полезным вставить его в цепочку вызовов программы, где URI:: Escape не может быть установлен:

Если вы хотите использовать GET запрос и использовать чистый локон просто добавить —get к решению @Jacob.

-s ( —slurp ) считывает входные строки в массив и -s -R ( —slurp —raw-input ) считывает входные данные в одну строку. -r ( —raw-output ) выводит содержимое строк вместо строковых литералов JSON.

или этот процент-кодирует все байты:

Источник

Оцените статью