gifts2017

Простой пример HTTP-запроса: поиск в Яндекс/Google

Опубликовал Dmitriy Zyablikov (Dimz_z) в раздел Обмен - Интеграция с WEB

Пример взаимодействия со сторонними REST сервисами из 1С:Предприятия 8.3

Задача:

Возникла задача поиска фраз в интернете. Решил поделиться результатами=)

Статей на тему HTTP-запросов достаточно, но ничего не нашел насчет работы с поисковыми системами.

Предыстория:

Подробнее об использовании GET и POST-запросов можно узнать ниже.

О протоколе HTTP можно узнать тут: https://ru.wikipedia.org/wiki/HTTP

Описание REST интерфейса в прикладных решениях: http://v8.1c.ru/o7/201312rest/index.htm

HTTP-сервисы в прикладных решениях: http://v8.1c.ru/o7/201312http/index.htm

Собственно сам код GET-запроса:

	Если ТочноеСоответствие Тогда
		ТочныйПоиск = "&wordforms=exact";
	КонецЕсли;
	
	Если ГдеИскать = "Yandex" Тогда
		стрURL  = "http://yandex.ru/search/?text=" + СокрЛП(ТекстПоиска) + "&lr=2" + ТочныйПоиск;
	Иначе
		Если ТочноеСоответствие Тогда
			стрURL  = "http://www.google.ru/#q=" + СокрЛП(ТекстПоиска) + "&newwindow=1&tbs=li:1";
		Иначе
			стрURL  = "http://www.google.ru/#q=" + СокрЛП(ТекстПоиска) + "&newwindow=1&tbas=0";
		КонецЕсли;
	КонецЕсли;
	
	//вычислить адрес сервера из адресной сторки
	//пример АдресСервера: "yandex.ru" 
	АдресСервера1 = СтрЗаменить(стрURL, "http://" ,"");  
	ИндексСлеша   = Найти(АдресСервера1, "/");
	АдресСервера  = Сред(АдресСервера1, 0 ,индексСлеша - 1);

        //вычислить строку URL
	//пример URL: "/search/?text=1C&lr=2&wordforms=exact"" 
	ДлинаСтроки = СтрДлина(АдресСервера1);
	URL = "/" + Прав(АдресСервера1, ДлинаСтроки - ИндексСлеша);

	//установим заголовки соединения
	//каждая страница требует индивидуального подхода 
	ЗаголовокGET = Новый Соответствие();
	ЗаголовокGET.Вставить("GET " + URL + " HTTP/1.1");
	//ЗаголовокGET.Вставить("Accept"                   , "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
	//ЗаголовокGET.Вставить("Accept-Encoding"          , "gzip, deflate, sdch");
	//ЗаголовокGET.Вставить("Accept-Language"          , "ru,en;q=0.8");

	Попытка
		
		//ВременныйФайл = ПолучитьИмяВременногоФайла("html");
					
		ssl1 = Новый ЗащищенноеСоединениеOpenSSL(
            Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
            Новый СертификатыУдостоверяющихЦентровWindows());
		
	    HTTPСоединение = Новый HTTPСоединение(АдресСервера,,,,,,ssl1);

	    HTTPЗапрос     = Новый HTTPЗапрос(URL, ЗаголовокGET);

		//HTTPОтвет      = HTTPСоединение.Получить(HTTPЗапрос, ВременныйФайл);
	    HTTPОтвет      = HTTPСоединение.Получить(HTTPЗапрос);

	    КодСостояния   = HTTPОтвет.КодСостояния;

		ТекстОтвета    = HTTPОтвет.ПолучитьТелоКакСтроку();
		
	Исключение
	    Сообщить("Не удалось установить соединение с сервером :" 
	        + Символы.ПС + ИнформацияОбОшибке().Описание);
	    Возврат;
	КонецПопытки;	//
	
	Если КодСостояния=200 Тогда
		Если Найти(ТекстОтвета, "По вашему запросу ничего не нашлось")>0 
			ИЛИ Найти(ТекстОтвета, "ничего не найдено.")>0 Тогда
			Сообщить("По вашему запросу ничего не нашлось.");
		Иначе
			Сообщить("Поиск дал результаты.");
		КонецЕсли;
	Иначе
	    Сообщить("Не удалось выполнить поисковый запрос.");
	КонецЕсли;


 

Прикладываю обработку.

Скачать файлы

Наименование Файл Версия Размер
Поиск в интернете.epf 14
.epf 8,70Kb
31.12.15
14
.epf 8,70Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Максим *** (premier) 29.12.15 13:49
(0) Я так полагаю, что следовало бы указать платформу 1С:Предприятие.
На платформе 8.2 следующий код просто вызовет ошибку:

ssl1 = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
Новый СертификатыУдостоверяющихЦентровWindows());
2. Dmitriy Zyablikov (Dimz_z) 29.12.15 14:03
(1) premier, исправлю. По скриншотам видно, что интерфейс "Такси":)
3. TMV 29.12.15 15:13
(0) все, что указано в заголовках соединения, не нужно, кроме первого.
4. Сергей Боровик (BorovikSV) 29.12.15 16:15
(0) Клюнул на "Пример использования REST интерфейса 1С:Предприятия", оказался обычный GET запрос.
Зачем же вводить в заблуждение? (от меня минус именно за это)

5. Dmitriy Zyablikov (Dimz_z) 30.12.15 00:17
(4) BorovikSV, не было цели вводить в заблуждение. Исправил.
6. Программулькин (Программулькин) 30.12.15 09:41
как то не закончено, может результат как то вывести?
7. Dmitriy Zyablikov (Dimz_z) 30.12.15 11:13
(6) Программулькин, пример не является законченным решением=)
8. Алекс zhu4 (Arxxximed) 30.12.15 13:00
(0) Dimz_z,
Ой , убрали самое интересное, хорошо что со вчера не обновлял страницу
Вопрос в следующем:
Добавление заголовка HTTPЗапрос
 ЗаголовокGET.Вставить("Accept-Encoding"          , "gzip, deflate, sdch");

Вернет сжатый ответ.

Все же как его прочитать и получить текст HTML?
9. Dmitriy Zyablikov (Dimz_z) 31.12.15 13:28
(8) Arxxximed, html файл файл можно получить так:

ВременныйФайл = ПолучитьИмяВременногоФайла("html");

ssl1 = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
Новый СертификатыУдостоверяющихЦентровWindows());

HTTPСоединение = Новый HTTPСоединение(АдресСервера,,,,,,ssl1);

HTTPЗапрос = Новый HTTPЗапрос(URL, ЗаголовокGET);

HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос, ВременныйФайл);

КодСостояния = HTTPОтвет.КодСостояния;