Контест Middle net/http и middleware обновлено
Разбор query-строки URL с декодированием на Go
Условие
Разберите строки запроса URL. Правила как у url.ParseQuery:
- строка делится на части по
&, пустые части пропускаются; - часть делится на ключ и значение по первому
=; если=нет, значение пустое; - в ключе и значении
+означает пробел,%XX(две шестнадцатеричные цифры, регистр любой) означает байт с этим кодом; %, за которым нет двух шестнадцатеричных цифр, делает всю строку ошибочной.
Ввод: n (1 ≤ n ≤ 500), затем n строк (могут быть пустыми). Символов ; и # в строках нет.
Вывод: для каждой строки пары ключ=значение по одной в строке: ключи по возрастанию (побайтово), значения одного ключа в порядке появления. Если строка ошибочная, вместо пар выведите error. После каждой строки ввода выведите --. Проверка построчная.
Пример
3
a=1&b=2&a=3
q=go+lang&lang=%D1%80%D1%83
x=%zz&y=1
a=1
a=3
b=2
--
lang=ру
q=go lang
--
error
--
Как подойти
url.ParseQuery или ручной разбор: split по &, Cut по =, декодирование + и %XX.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Разбор сырого HTTP/1.1 запроса на Go
Следующий вопрос
Маршрутизатор с параметрами пути в стиле ServeMux
Термины по теме
Ещё по теме «net/http и middleware»
- Статистика access-логов: ошибки и p95 на Go
- Rate limiter на токен-бакете для middleware на Go
- Зачем закрывать resp.Body
- Таймаут http.DefaultClient
- Обработчики net/http и горутины
- http.HandlerFunc
- Надёжный HTTP-клиент в Go
- HTTP-сервис на стандартной библиотеке