Меню


Курсы СтимулСправочникПолезные материалы1С:Предприятие 8.2РазработчикамПлатформа, механизмы и техн…

1С:Предприятие 8.2 /
Разработчикам /
Платформа, механизмы и технологии

Оглавление

Пример работы с HTTPСоединение

Пример демонстрирует обработку кодов состояния , которые может вернуть HTTP-сервер. Отдельно обрабатываются ошибки запроса, ошибки сервера и перенаправление на новый URL-адрес.

Для работы примера требуется платформа " 1С:Предприятие " версии 8.2.18 и выше или 8.3.3 и выше.

&НаКлиенте
 Процедура  ВыполнитьЗапрос(Команда)
	ВыполнитьHTTPЗапрос("http://example.com");
 КонецПроцедуры  

&НаКлиенте 
Процедура ВыполнитьHTTPЗапрос(ПолныйАдресРесурса)
	СтруктураURI = СтруктураURI(ПолныйАдресРесурса);
	HTTPСоединение = Новый HTTPСоединение(СтруктураURI.Хост, СтруктураURI.Порт);
	HTTPЗапрос = Новый HTTPЗапрос(СтруктураURI.ПутьНаСервере);
	Попытка  
		Результат =  HTTPСоединение.Получить(HTTPЗапрос);
	Исключение     
		// исключение здесь говорит о том, что запрос не дошел до HTTP-Сервера    
		Сообщить("Произошла сетевая ошибка!");
		ВызватьИсключение;
	КонецПопытки;
	// Анализируем фатальные ошибки  
	// В большинстве случаев нужно остановить работу и показать  пользователю  сообщение об ошибке, 
	// включив в него HTTP-статус     
	// Ошибки 4XX говорят о неправильном запросе - в широком смысле   
	// Может быть неправильный адрес, ошибка  аутентификации , плохой формат запроса   
	//  Подробнее  смотри http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4 
	Если Результат.КодСостояния >= 400 и Результат.КодСостояния < 500  Тогда
		Сообщить("Код статуса больше 4XX, ошибка запроса.   Код статуса:  " + Результат.КодСостояния);
	КонецЕсли;
	// Ошибки 5XX говорят о проблемах на сервере (возможно, прокси-сервер)
	// Это может быть программная ошибка, нехватка памяти, ошибка  конфигурации  и т.д.
	// Подробнее смотри http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5  
	Если Результат.КодСостояния >= 500 и Результат.КодСостояния <600  Тогда
		Сообщить("Код статуса больше 5XX, ошибка сервера. Код статуса: " + Результат.КодСостояния);
	КонецЕсли;
	// Обрабатываем перенаправление    
	Если Результат.КодСостояния >= 300 и Результат.КодСостояния < 400  Тогда
		Сообщить("Код статуса больше 3XX, Перенаправление. Код статуса: " + Результат.КодСостояния);
		Если Результат.КодСостояния = 302 Тогда
			Сообщить("Код статуса 302, Постоянное перенаправление.");
			АдресРесурса = Результат.Заголовки.Получить("Location");
			Если АдресРесурса <>	 Неопределено  Тогда
				Сообщить(" Выполняю запрос по новому адресу  " + АдресРесурса);
				ВыполнитьHTTPЗапрос(АдресРесурса);
			Иначе                  
				Сообщить("Сервер не сообщил адрес ресурса!");
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	// Статусы 1XX и 2XX считаем хорошими     
	Если Результат.КодСостояния < 300 Тогда
		Сообщить(" Скорее всего все хорошо ");
		Сообщить("Код статуса: " + Результат.КодСостояния);
	КонецЕсли;
КонецПроцедуры  

&НаКлиенте 
Функция СтруктураURI(Знач СтрокаURI) Экспорт
	СтрокаURI = СокрЛП(СтрокаURI);
	// схема  
	Схема = "";
	Позиция = Найти(СтрокаURI, "://");
	Если Позиция >0 Тогда
		Схема = НРег(Лев(СтрокаURI, Позиция - 1));
		СтрокаURI = Сред(СтрокаURI, Позиция + 3);
	КонецЕсли;
	// строка соединения и путь на сервере
	СтрокаСоединения = СтрокаURI;
	ПутьНаСервере = "";
	Позиция = Найти(СтрокаСоединения, "/");
	Если Позиция >0 Тогда
		ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1);
		СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1);
	КонецЕсли;
	//  информация   пользователя  и имя сервера  
	СтрокаАвторизации = "";
	ИмяСервера = СтрокаСоединения;
	Позиция = Найти(СтрокаСоединения, "@");
	Если Позиция >0 Тогда
		СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1);
		ИмяСервера = Сред(СтрокаСоединения, Позиция + 1);
	КонецЕсли;
	// логин и пароль  
	Логин = СтрокаАвторизации;
	Пароль = "";
	Позиция = Найти(СтрокаАвторизации, ":");
	Если Позиция >0 Тогда
		Логин = Лев(СтрокаАвторизации, Позиция - 1);
		Пароль = Сред(СтрокаАвторизации, Позиция + 1);
	КонецЕсли;
	// хост и порт  
	Хост = ИмяСервера;
	Порт = "";
	Позиция = Найти(ИмяСервера, ":");
	Если Позиция >0 Тогда
		Хост = Лев(ИмяСервера, Позиция - 1);
		Порт = Сред(ИмяСервера, Позиция + 1);
	КонецЕсли;
	Результат = Новый Структура;
	Результат.Вставить("Схема", Схема);
	Результат.Вставить("Логин", Логин);
	Результат.Вставить("Пароль", Пароль);
	Результат.Вставить("ИмяСервера", ИмяСервера);
	Результат.Вставить("Хост", Хост);
	Результат.Вставить("Порт", ?(Порт <> "", Число(Порт), Неопределено));
	Результат.Вставить("ПутьНаСервере", ПутьНаСервере);
	Возврат Результат;
 КонецФункции 

Нас находят: httpсоединение в 1с 8 3, 1с HTTPСоединение, пример Записать() в Нттрсоединение


Подписка на новости RSS

Мы на Facebook