Задача:
Возникла задача поиска фраз в интернете. Решил поделиться результатами=)
Статей на тему 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 Тогда
Сообщить("По вашему запросу ничего не нашлось.");
Иначе
Сообщить("Поиск дал результаты.");
КонецЕсли;
Иначе
Сообщить("Не удалось выполнить поисковый запрос.");
КонецЕсли;
Прикладываю обработку.
(0) Я так полагаю, что следовало бы указать платформу 1С:Предприятие.
На платформе 8.2 следующий код просто вызовет ошибку:
ssl1 = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
Новый СертификатыУдостоверяющихЦентровWindows());
(1) premier, исправлю. По скриншотам видно, что интерфейс «Такси»:)
(0) все, что указано в заголовках соединения, не нужно, кроме первого.
(0) Клюнул на «Пример использования REST интерфейса 1С:Предприятия», оказался обычный GET запрос.
Зачем же вводить в заблуждение? (от меня минус именно за это)
(4) BorovikSV, не было цели вводить в заблуждение. Исправил.
как то не закончено, может результат как то вывести?
(6) Программулькин, пример не является законченным решением=)
(0)
Ой , убрали самое интересное, хорошо что со вчера не обновлял страницу
Вопрос в следующем:
Добавление заголовка HTTPЗапрос
Вернет сжатый ответ.
Все же как его прочитать и получить текст HTML?
(8) Arxxximed, html файл файл можно получить так:
ВременныйФайл = ПолучитьИмяВременногоФайла(«html»);
ssl1 = Новый ЗащищенноеСоединениеOpenSSL(
Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
Новый СертификатыУдостоверяющихЦентровWindows());
HTTPСоединение = Новый HTTPСоединение(АдресСервера,,,,,,ssl1);
HTTPЗапрос = Новый HTTPЗапрос(URL, ЗаголовокGET);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос, ВременныйФайл);
КодСостояния = HTTPОтвет.КодСостояния;
Здравствуйте, код для яндекса перестал работать (до этого работал)
Ещё не обновлялась структура http-запроса? Была на хабре статья по поводу изменений