Кодирование формы
Урок 34 из 47 курса Сетевое взаимодействие в терминале на Coddy.
При использовании -d curl добавляет заголовок, описывающий формат тела запроса:
Content-Type: application/x-www-form-urlencodedЭто длинное имя обозначает формат, который HTML-формы всегда использовали: пары key=value, соединённые с помощью &. Сервер читает этот заголовок и знает, что тело нужно разделить по этим символам.
Отсюда возникает очевидный вопрос: что, если значение содержит & или =? Его нужно экранировать, записав в виде знака процента и двух шестнадцатеричных цифр. Пробел превращается в %20 или +, амперсанд — в %26.
--data-urlencode выполняет это экранирование за вас, и для любых данных, введённых человеком, следует предпочитать именно его. Передача необработанных пользовательских данных через обычный -d приводит к тому, что поля таинственным образом обрезаются на первом амперсанде.
Задание
СложноПодтвердите заголовок, который curl выбирает для вас.
- Запустите прослушиватель захвата на порту 9124
- Отправьте POST с
a=1с помощью-d - Выведите строку Content-Type из
req.txt
Ожидаемый вывод:
Content-Type: application/x-www-form-urlencodedСопоставляйте без учёта регистра и привяжите шаблон к началу строки.
Попробуйте сами
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Сетевое взаимодействие в терминале
4Доступен ли он?
ICMP и pingЧтение вывода pingКогда ping вводит в заблуждениеОтказано или превышено время ожиданияПовторение: доступность7Отправка данных
POST с -dЧто на самом деле отправляет -dКодирование формыОтправка JSONPUT и DELETEПовторение: запись данных3Порты и сокеты
Что такое портХорошо известные портыЛокальный хостПрослушивание и подключениеПовторение: порты6curl в деталях
Просмотр заголовковСохранение ответовПользовательские заголовкиСтатус и время выполненияКоды выхода curlПовторение: флаги curl9Аутентификация и отладка
API-ключи и BearerUser-AgentТайм-ауты и повторные попыткиАнализ ошибкиПовторение: отладкаПотренируйтесь самостоятельно: Песочница Terminal