Кодировка не является противоречивой, URL используется только в двух разных ситуациях с двумя разными требованиями.
URL начинается не закодированным в вашем приложении. Второй пример, который вы опубликовали, - это значение, которое будет передано на сервер в качестве заголовка, поэтому оно должно быть закодировано в URL (это один раз).
Подписанный заголовок авторизации
перечислены как: OAuth
oauth_nonce = "QP70eNmVz8jvdPevU3oJD2AfF7R7odC2XJcn4XlZJqk",
oauth_callback = "http% 3A% 2F% 2Flocalhost% 3A3005% 2Fthe_dance% 2Fprocess_callback% 3Fservice_provider_id% 3D11", ...
Затем значения всех параметров заголовка OAuth должны быть объединены с другими необходимыми значениями, чтобы создать базовую строку для подписи. Базовая строка создается из значений , поскольку они передаются на сервер . Таким образом, вы берете значение, которое вы передаете на сервер, ваш уже закодированный URL, и объединяете его с другими значениями, каждое из которых должно быть закодировано в URL, чтобы сформировать новую строку, разделенную &
.
Вы можете понять, почему это необходимо сделать, поскольку третий раздел базовой строки содержит параметры запроса, значения которых уже закодированы в URL (например, oauth_callback
), и в качестве разделителя используется &
. Чтобы безопасно объединить этот список параметров запроса (содержащий &
) в базовую строку (также используя &
в качестве разделителя), перед объединением его необходимо снова закодировать в URL. В этот момент oauth_callback
был закодирован дважды, один раз, а один раз как часть большего объединенного значения:
Указана базовая строка подписи
как:
POST & ... oauth_callback% 3Dhttp% 253A% 252F% 252Flocalhost% 253A3005% 252Fthe_dance% 252Fprocess_callback% 253Fservice_provider_id% 253D11% 26oauth_consumer_key% 3D ...