Что означают% 5B и% 5D в запросах POST?

266

Я пытаюсь написать класс Java для входа на определенный сайт. Данные, отправленные в запросе POST для входа в систему

user%5Blogin%5D=username&user%5Bpassword%5D=123456

Мне любопытно, что %5Bи что %5Dозначает в ключе входа пользователя .

Как мне закодировать эти данные?

Ракиб Ансары
источник

Ответы:

482

Согласно этому ответу здесь : str='foo%20%5B12%5D'кодирует foo [12]:

%20 is space
%5B is '['
and %5D is ']'

Это называется процентным кодированием и используется при кодировании специальных символов в значениях параметров url.

РЕДАКТИРОВАТЬ Кстати, когда я читал https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURI#Description , мне просто пришло в голову, почему так много людей делают один и тот же поиск. Смотрите примечание внизу страницы:

Также обратите внимание, что если кто-то хочет следовать более позднему RFC3986 для URL, зарезервировав квадратные скобки (для IPv6) и, следовательно, не закодированный при формировании чего-то, что может быть частью URL (например, хоста), может помочь следующее.

function fixedEncodeURI (str) {
    return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
}

Надеюсь, это поможет людям разобраться в своих проблемах, когда они наткнуться на этот вопрос.

Борис Странджев
источник
1
Большое спасибо за это.
Ракиб Ансары
@TacticalCoder: да, спасибо. Это мой плохой английский. Исправляя это прямо сейчас.
Борис Странджев
ваша ссылка RFC3986 не работает
DudeOnRock
13

[]заменяется %5B%5Dна время кодирования URL.

Лалит Бхудия
источник
3

Чтобы быстро взглянуть, вы можете выполнить процентное декодирование с помощью этого онлайн-инструмента .

Кшиштоф Пшигода
источник
1
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится. - Из обзора
Питер
@Peter Спасибо, но это всего лишь ссылка на онлайн-инструмент, который может быть полезен здесь. Поскольку ответы уже были предоставлены, дальнейшие объяснения не нужны.
Кшиштоф Пшигода
1

Данные, вероятно, были бы опубликованы первоначально из веб-формы, выглядящей примерно так (но, вероятно, намного более сложной):

<form action="http://example.com" method="post">

  User login    <input name="user[login]"    /><br />
  User password <input name="user[password]" /><br />

  <input type="submit" />
</form>

Если бы метод был «get» вместо «post», нажатие кнопки «Отправить» приведет к переходу на URL, который выглядит примерно так:

http://example.com/?user%5Blogin%5D=username&user%5Bpassword%5D=123456

или:

http://example.com/?user[login]=username&user[password]=123456

Веб - сервер на другом конце, скорее всего , взять user[login]и user[password]параметры, и превратить их в userобъект с loginи passwordполей , содержащих эти значения.

mwfearnley
источник
0

Не менее важно, почему эти символы встречаются в URL. См. Https://www.php.net/manual/en/function.parse-str.php#76792 , в частности:

parse_str('foo[]=1&foo[]=2&foo[]=3', $bar);

вышесказанное производит:

$bar = ['foo' => ['1', '2', '3'] ];

и что такое метод для разделения переменных запросов в массивах (по крайней мере, в php).

BBE
источник