diff --git "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200URL.os" "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200URL.os" index c0e1e5e..d53513b 100644 --- "a/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200URL.os" +++ "b/src/internal/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\320\260\321\200\321\201\320\265\321\200URL.os" @@ -20,52 +20,6 @@ КонецПроцедуры -Процедура РазбитьСтрокуПоРазделителю(ИзвлекаемаяЧасть, ОстальнаяЧасть, Разделитель, Инверсия = Ложь) - - Индекс = СтрНайти(ОстальнаяЧасть, Разделитель); - Если Индекс Тогда - ИзвлекаемаяЧасть = Лев(ОстальнаяЧасть, Индекс - 1); - ОстальнаяЧасть = Сред(ОстальнаяЧасть, Индекс + СтрДлина(Разделитель)); - Если Инверсия Тогда - ДляОбмена = ИзвлекаемаяЧасть; - ИзвлекаемаяЧасть = ОстальнаяЧасть; - ОстальнаяЧасть = ДляОбмена; - КонецЕсли; - КонецЕсли; - -КонецПроцедуры - -Функция РазделитьПоПервомуНайденномуРазделителю(Строка, Разделители) - - МинимальныйИндекс = СтрДлина(Строка); - ПервыйРазделитель = ""; - - Для Каждого Разделитель Из Разделители Цикл - Индекс = СтрНайти(Строка, Разделитель); - Если Индекс = 0 Тогда - Продолжить; - КонецЕсли; - Если Индекс < МинимальныйИндекс Тогда - МинимальныйИндекс = Индекс; - ПервыйРазделитель = Разделитель; - КонецЕсли; - КонецЦикла; - - Результат = Новый Массив; - Если ЗначениеЗаполнено(ПервыйРазделитель) Тогда - Результат.Добавить(Лев(Строка, МинимальныйИндекс - 1)); - Результат.Добавить(Сред(Строка, МинимальныйИндекс + СтрДлина(ПервыйРазделитель))); - Результат.Добавить(ПервыйРазделитель); - Иначе - Результат.Добавить(Строка); - Результат.Добавить(""); - Результат.Добавить(Неопределено); - КонецЕсли; - - Возврат Результат; - -КонецФункции - Процедура РазобратьURL(Знач URL) ДопустимыеСхемы = СтрРазделить("http,https", ","); @@ -90,7 +44,7 @@ АутентификацияЧасти = СтрРазделить(АутентификацияСтрока, ":"); Аутентификация.Пользователь = АутентификацияЧасти[0]; Аутентификация.Пароль = АутентификацияЧасти[1]; - КонецЕсли; + КонецЕсли; // IPv6 РазбитьСтрокуПоРазделителю(Сервер, URL, "]"); @@ -109,13 +63,25 @@ Если ЗначениеЗаполнено(Порт) Тогда Порт = Число(Порт); Иначе - Порт = 0; + Порт = 0; КонецЕсли; РазбитьСтрокуПоРазделителю(Фрагмент, Путь, "#", Истина); + ЗаполнитьПараметрыЗапроса(Путь); + + Если Не ЗначениеЗаполнено(Схема) Тогда + Схема = "http"; + КонецЕсли; + Путь = ?(ЗначениеЗаполнено(Путь), Путь, "/"); + +КонецПроцедуры + +Процедура ЗаполнитьПараметрыЗапроса(Путь) + Запрос = ""; РазбитьСтрокуПоРазделителю(Запрос, Путь, "?", Истина); + Запрос = РаскодироватьСтроку(Запрос, СпособКодированияСтроки.URLВКодировкеURL); Для Каждого СтрокаКлючРавноПараметр Из СтрРазделить(Запрос, "&", Ложь) Цикл @@ -142,10 +108,51 @@ КонецЕсли; КонецЦикла; + +КонецПроцедуры + +Процедура РазбитьСтрокуПоРазделителю(ИзвлекаемаяЧасть, ОстальнаяЧасть, Разделитель, Инверсия = Ложь) - Если Не ЗначениеЗаполнено(Схема) Тогда - Схема = "http"; + Индекс = СтрНайти(ОстальнаяЧасть, Разделитель); + Если Индекс Тогда + ИзвлекаемаяЧасть = Лев(ОстальнаяЧасть, Индекс - 1); + ОстальнаяЧасть = Сред(ОстальнаяЧасть, Индекс + СтрДлина(Разделитель)); + Если Инверсия Тогда + ДляОбмена = ИзвлекаемаяЧасть; + ИзвлекаемаяЧасть = ОстальнаяЧасть; + ОстальнаяЧасть = ДляОбмена; + КонецЕсли; КонецЕсли; - Путь = ?(ЗначениеЗаполнено(Путь), Путь, "/"); КонецПроцедуры + +Функция РазделитьПоПервомуНайденномуРазделителю(Строка, Разделители) + + МинимальныйИндекс = СтрДлина(Строка); + ПервыйРазделитель = ""; + + Для Каждого Разделитель Из Разделители Цикл + Индекс = СтрНайти(Строка, Разделитель); + Если Индекс = 0 Тогда + Продолжить; + КонецЕсли; + Если Индекс < МинимальныйИндекс Тогда + МинимальныйИндекс = Индекс; + ПервыйРазделитель = Разделитель; + КонецЕсли; + КонецЦикла; + + Результат = Новый Массив; + Если ЗначениеЗаполнено(ПервыйРазделитель) Тогда + Результат.Добавить(Лев(Строка, МинимальныйИндекс - 1)); + Результат.Добавить(Сред(Строка, МинимальныйИндекс + СтрДлина(ПервыйРазделитель))); + Результат.Добавить(ПервыйРазделитель); + Иначе + Результат.Добавить(Строка); + Результат.Добавить(""); + Результат.Добавить(Неопределено); + КонецЕсли; + + Возврат Результат; + +КонецФункции diff --git "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" index 932c962..45ba9ad 100644 --- "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" +++ "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\232\320\276\320\275\320\275\320\265\320\272\321\202\320\276\321\200HTTP\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" @@ -214,7 +214,7 @@ КонецФункции -Процедура ЗаполнитьСписокОтфильрованнымиCookies(Cookies, СтруктураURL, Список) +Процедура ЗаполнитьСписокОтфильтрованнымиCookies(Cookies, СтруктураURL, Список) Для Каждого Cookie Из Cookies Цикл Если Cookie.Значение.ТолькоБезопасноеСоединение = Истина И СтруктураURL.Схема <> "https" Тогда @@ -242,7 +242,7 @@ Если Не СтрНачинаетсяС(СтруктураURL.Путь, Путь.Ключ) Тогда Продолжить; КонецЕсли; - ЗаполнитьСписокОтфильрованнымиCookies(Путь.Значение, СтруктураURL, Результат); + ЗаполнитьСписокОтфильтрованнымиCookies(Путь.Значение, СтруктураURL, Результат); КонецЦикла; КонецЦикла;