Hi Admin!
Hi all!
Before one year ago (2017). I have a 1C script use HTTP Service with JSON POST to get file.json from Google Maps Api services and it works:
Code |
---|
&AtServer Функция СтруктураURI(Знач СтрокаURI) Экспорт СтрокаURI = СокрЛП(СтрокаURI); // вообще говоря, не надо учитывать символы после # // но для упрощения примера игнорируем такие случаи // схема Схема = ""; Позиция = Найти(СтрокаURI, "://"); Если Позиция > 0 Тогда Схема = НРег(Лев(СтрокаURI, Позиция - 1)); СтрокаURI = Сред(СтрокаURI, Позиция + 3); КонецЕсли; // строка соединения и путь на сервере СтрокаСоединения = СтрокаURI; ПутьНаСервере = ""; Позиция = Найти(СтрокаСоединения, "/"); Если Позиция > 0 Тогда ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1); СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1); КонецЕсли; // информация пользователя и имя сервера СтрокаАвторизации = ""; ИмяСервера = СтрокаСоединения; Позиция = Найти(СтрокаСоединения, "@"); Если Позиция > 0 Тогда СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1); ИмяСервера = Сред(СтрокаСоединения, Позиция + 1); КонецЕсли; // логин и пароль Логин = СтрокаАвторизации; Пароль = ""; Позиция = Найти(СтрокаАвторизации, ":"); Если Позиция > 0 Тогда Логин = Лев(СтрокаАвторизации, Позиция - 1); Пароль = Сред(СтрокаАвторизации, Позиция + 1); КонецЕсли; // хост и порт Хост = ИмяСервера; Порт = ""; Позиция = Найти(ИмяСервера, ":"); Если Позиция > 0 Тогда Хост = Лев(ИмяСервера, Позиция - 1); Порт = Сред(ИмяСервера, Позиция + 1); КонецЕсли; Результат = Новый Структура; Результат.Вставить("Схема", Схема); Результат.Вставить("Логин", Логин); Результат.Вставить("Пароль", Пароль); Результат.Вставить("ИмяСервера", ИмяСервера); Результат.Вставить("Хост", Хост); Результат.Вставить("Порт", ?(Порт <> "", Число(Порт), Неопределено)); Результат.Вставить("ПутьНаСервере", ПутьНаСервере); Возврат Результат; КонецФункции &AtServer Function GetDataFromGoogle() Try ИмяСервера = "https://maps.googleapis.com/maps/api/directions/json?units=metric&origin=Hanoi,%20viet%20nam&destination=Thai%20binh,%20viet%20nam&waypoints=optimize:true|20.665111,%20105.916432&key=AIzaSyCkd8UTXHe7YDb-BUFQjQdtNBTT6TlWOv8"; СтруктураURI = СтруктураURI(ИмяСервера); HTTP = Новый HTTPСоединение(СтруктураURI.Хост,,,,,True); // Получим временный файл для передачи в теле POST запроса ФайлТелаЗапроса = ПолучитьИмяВременногоФайла(); ТекстФайл = Новый ТекстовыйДокумент; ////ТекстФайл.УстановитьТекст(Text); ТекстФайл.Записать(ФайлТелаЗапроса, КодировкаТекста.ANSI); // Получим размер данных для передачи в заголовок ФайлНаОтправку = Новый Файл(ФайлТелаЗапроса); РазмерФайлаНаОтправку = XMLСтрока(ФайлНаОтправку.Размер()); // Получим временный файл — тело ответа POST запроса ФайлРезультат = ПолучитьИмяВременногоФайла(); // Заголовок создадим в виде соответствия ЗаголовокЗапросаHTTP = Новый Соответствие(); // Передаем в заголовках размер и тип данных на отправку ЗаголовокЗапросаHTTP.Вставить("Content-Length", РазмерФайлаНаОтправку); ЗаголовокЗапросаHTTP.Вставить("Content-Type", "application/json; charset=utf-8"); // Отсылаем POST запрос на обработку. // СсылкаНаРесурс — ссылка на веб-сервер (страницу), к которой посылается POST запрос СсылкаНаРесурс = СтруктураURI.ПутьНаСервере; try HTTP.ОтправитьДляОбработки(ФайлТелаЗапроса, СсылкаНаРесурс, ФайлРезультат, ЗаголовокЗапросаHTTP); except Message(ErrorDescription()); endtry; // Получим ответ ТекстовыйФайлОтвета = Новый ТекстовыйДокумент; ТекстовыйФайлОтвета.Прочитать(ФайлРезультат, КодировкаТекста.UTF8); СтрокаОтветаСервера = ТекстовыйФайлОтвета.ПолучитьТекст(); чтениеJSON = Новый ЧтениеJSON; чтениеJSON.ОткрытьФайл(ФайлРезультат); массивСтруктур = ПрочитатьJSON(чтениеJSON); If массивСтруктур.status = "OK" AND массивСтруктур.rows[0].elements[0].status = "OK" Then Message("Distnace = " + массивСтруктур.rows[0].elements[0].distance.value/1000 + " km"); EndIf; Except Message("Cannot connection with Google Map API services!"); EndTry; EndFunction |
But now I use it and get error "Error calling context method (Post): Internet error: The remote host did not pass authentication"
How to fix it?
Thanks in advance!