Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Сохранить кодовую часть веб-страницы в файл - как? (http://forums.kuban.ru/f1040/sohranit-_kodovuyu_chast-_veb-stranicy_v_fajl_-_kak-8637781.html)

perpetum 16.04.2018 17:52

Сохранить кодовую часть веб-страницы в файл - как?
 
Привет всем!
С 13 апреля 2018г обнаружилось, что контур-фокус закрыл доступ к веб-запросам (общался с ними), но есть доступ
к серверу контур-фокус командой:
ЗапуститьПриложение(СтрокаЗапроса);
- На экран выходит экранная форма ответа.
- Нужно сохранить кодовую часть полученной веб-страницы в текстовый файл - как?
- Вручную - через сохранить как - и перекодировкой в кириллицу 1251 - можно, но непроизводительно.
К тому же - хотелось бы не открывать экранную форму - она затратна, а сразу перейти в режим сохранения.
- У кого есть опыт?
:-)

EarlyBird 16.04.2018 18:02

Microsoft.XMLHTTP

perpetum 16.04.2018 18:49

1-Ирли Бёрд >???
Имеется в виду вот это?
СтрокаHTTPЗапроса="https://focus.kontur.ru/search?query="+Наименование_+"&region="+?(ВыбРегион.Выбран()=1,Число(ВыбРегион.Код),"")+"&industry="+"&state=081077917";

хHTTP = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
хHTTP.open ("GET", СтрокаHTTPЗапроса,0);
хHTTP.send();
ТекстHTTPОтвета = хHTTP.responsetext();
Текст.ДобавитьСтроку(СтрЗаменить(ТекстHTTPОтвета,"utf-8","windows-1251"));
Текст.Записать(Каталогпользователя() + "otvet32.htm");

- Не работает - уже описал проблему в 0-perpetum >.
Работает только: ЗапуститьПриложение(СтрокаHTTPЗапроса);
Но в таком случает ответ выходит в виде экранной формы, а нужно кодовую часть сохранить в файл, не открывая экранную форму.

migi 16.04.2018 22:48

К тому же - хотелось бы не открывать [em]экранную форму[/em] - она затратна, а сразу перейти в режим сохранения.
Но в таком случает ответ выходит в виде [em]экранной формы[/em], а нужно кодовую часть сохранить в файл, не открывая экранную форму.
экранная формa в вашем случае это что, о чем речь? - желательно скрин

perpetum 17.04.2018 04:24

3-migi >Без скрина, просто запросом в строке браузера Google Chrom:
[url]https://focus.kontur.ru/entity?query=5067746794671[/url]
Здесь "5067746794671" = ОГРН организации, для примера.
Посмотреть кодовую часть при этом, можно в режиме "Просмотр кода страницы". Нужно перехватить ответ по запросу к серверу focus.kontur.ru и сохранить в файл, или текстовый образ.

migi 17.04.2018 04:52

7.7-ка?

EarlyBird 17.04.2018 04:54

Функция ПрочитатьСтраницуВФайлXML(АдресСтраницы)

Перем XMLHTTPRequest, ADODBStream;

стрАдресСтраницы = СокрЛП(АдресСтраницы);
Состояние("Чтение страницы "+стрАдресСтраницы);

Попытка
XMLHTTPRequest = СоздатьОбъект("Microsoft.XMLHTTP");

Исключение
Сообщить("Ошибка создания Microsoft.XMLHTTP", "!!");
Возврат "";

КонецПопытки;

XMLHTTPRequest.Open("GET", стрАдресСтраницы, 0);

Попытка
XMLHTTPRequest.Send();
Исключение
Сообщить("Ошибка выполнения метода SEND объекта Microsoft.XMLHTTP", "!!");
Возврат "";
КонецПопытки;

//получили текст страницы в XMLHTTPRequest.ResponseBody

Попытка
ADODBStream = СоздатьОбъект("ADODB.Stream");

Исключение
Сообщить("Ошибка создания ADODB.Stream", "!!");
Возврат "";
КонецПопытки;

//тип и режим потока
ADODBStream.Mode = 3;
ADODBStream.Type = 1;

ADODBStream.Open();


//объект для управления скриптами
Попытка
ScriptControl = СоздатьОбъект("MSScriptControl.ScriptControl");

Исключение
Сообщить("Ошибка создания MSScriptControl.ScriptControl", "!!");
Возврат "";
КонецПопытки;

ScriptControl.Language = "vbscript";

//добавим созданные объекты
ScriptControl.AddObject("ADODBStream", ADODBStream);
ScriptControl.AddObject("XMLHTTPRequest", XMLHTTPRequest);

//скриптом запишем в поток ADO данные из объекта XMLHTTPRequest, то есть содержимое страницы
ScriptControl.Eval("ADODBStream.Write(XMLHTTPRequest.ResponseBody)");


//скидываем во временный файл
ИмяФайла = СтрЗаменить(стрАдресСтраницы, "://", "_");

Если Найти(ИмяФайла, "%") <> 0 Тогда
//url-кодировка детектед!
ИмяФайла = РаскодироватьURL(ИмяФайла);
КонецЕсли;

ИмяФайла = ЗаменитьЗарезервированныеСимволы(ИмяФайла);
ИмяФайла = КаталогВременныхФайлов() + ИмяФайла+".xml";

Попытка
ADODBStream.SaveToFile(ИмяФайла, 2);
Исключение
Сообщить("Не удалось записать файл "+ИмяФайла+РазделительСтрок+ОписаниеОшибки(), "!!");
Возврат "";
КонецПопытки;

//закрываем поток
ADODBStream.Close();

//деструкторы
ScriptControl = "";
ADODBStream = "";
oleXM = "";

Возврат ИмяФайла;

КонецФункции //ПрочитатьСтраницуВФайлXML

perpetum 17.04.2018 05:14

[quote=migi;45511859] 7.7-ка? [/quote]
Да, 7.7. :-)

EarlyBird 17.04.2018 05:51

во-первых, прекращай палиться
во-вторых, посмотри пример, он рабочий

migi 17.04.2018 06:01

ЗапуститьПриложение
Выполняет запуск внешнего приложения.
Синтаксис:
ЗапуститьПриложение(<СтрокаКоманды>)
Англоязычный синоним:
RunApp
Параметры:
<СтрокаКоманды>
Строковое выражение, содержащее строку команды запуска внешнего приложения или имя файла, чтобы открыть его с помощью ассоциированного для данного вида файлов приложения.
Описание:
Процедура ЗапуститьПриложение вызывает запуск [b]внешнего приложения[/b]. В отличие от функции КомандаСистемы запуск приложения выполняется непосредственно, минуя командный интерпретатор. При выполнении команды исполняемый файл загружается как «верхняя», активная программа.
Процедура, кроме того, может открыть файл с помощью ассоциированного для данного вида файлов приложения. (При условии, что таковое установлено на данном компьютере).
Если загружается Windows-приложение, то управление немедленно возвращается в систему 1С:Предприятие на следующий за оператором ЗапуститьПриложение оператор и система продолжает выполняться как фоновая прикладная программа. Пользователь может возвратиться в запускающую программу или закончив выполнение запущенной, или переключившись обратно посредством списка задач Windows.
Если в параметре <СтрокаКоманды> не содержится путь к загружаемой программе в файловой системе к программе, то поиск происходит в следующей последовательности:
текущий системный каталог;
каталог Windows;
системный каталог Windows;
все каталоги, указанные в переменной PATH;
Пример:
* В данном примере запускается редактор текста notepad.exe и в него загружается файл textl. txt.
ЗапуститьПриложение("[b]notepad textl.txt[/b]");

намек ясен?

migi 17.04.2018 06:03

[quote=Ирли Бёрд;45511875]во-первых, прекращай палиться во-вторых, посмотри пример, он рабочий[/quote]д/с ладушки
[code][code]*[/code][/code]

migi 17.04.2018 06:09

[quote=Ирли Бёрд;45511875]во-первых ... он рабочий[/quote]подарок
[code][code]*[/code][/code]

migi 17.04.2018 06:28

8-Ирли Бёрд > 3430км.

perpetum 17.04.2018 06:44

[quote=migi;45511877]ЗапуститьПриложение("notepad textl.txt"); намек ясен? [/quote]
:-)
Об этом я уже писал в 2-perpetum >
[u]Цитата:[/u]
Работает только: ЗапуститьПриложение(СтрокаHTTPЗапроса);
Но в таком случает ответ выходит в виде экранной формы, а нужно кодовую часть сохранить в файл, не открывая экранную форму.
[u]КонецЦитаты[/u]
Дело в том, что ассоциированное приложение - интернетексплорер, который возвращает экранную форму...

migi 17.04.2018 06:55

скайп? 1С++

perpetum 17.04.2018 07:04

[quote=Ирли Бёрд;45511861]//получили текст страницы в XMLHTTPRequest.ResponseBody[/quote]
- на этом и затыкается, потому как, при обращении к контур-фокус, метод GER-send не работает (перестал работать с 13.04.2018г - общался со спецами контур-фокус - не хотят бесплатной раздачи), а именно:
XMLHTTPRequest.Open("GET", стрАдресСтраницы, 0);
XMLHTTPRequest.Send();
- возвращает пустое значение...
Попытка
ТекстОтвета=XMLHTTPRequest.ResponseBody;
Исключение
Сообщить("Ошибка вывода XMLHTTPRequest.ResponseBody");
КонецПопытки;
- вылетает на сообщение "ошибка".

Может я неправильно интерпретирую структуру XMLHTTPRequest ?

perpetum 17.04.2018 07:15

15-perpetum > - описка, читать: GER-send = GET-send

migi 17.04.2018 07:40

16-perpetum > в базовых конфигурациях подсмотреть

migi 17.04.2018 08:12

CHECK_KA.ERT

migi 17.04.2018 08:18

запрос к
[quote=perpetum;45511855]https://focus.kontur.ru/entity?query=5067746794671[/quote]
успешно возвращает
[code]
<!doctype html>
<!--[if IE]><![endif]-->
<!--[if lt IE 7]><html class="ie-lt7 ie-lt8 ie-lt9 ie-lt10" lang="ru"><![endif]-->
<!--[if IE 7]><html class="ie-lt8 ie-lt9 ie-lt10" lang="ru"><![endif]-->
<!--[if IE 8]><html class="ie-lt9 ie-lt10" lang="ru"><![endif]-->
<!--[if IE 9]><html class="ie-lt10" lang="ru"><![endif]-->
<!--[if !IE]><!--><html lang="ru"><!--<![endif]-->
<head>
<meta cha ... ){d.addEventListener("DOMContentLoaded",f,false);**else{f();****)(document,window,"yandex_metrika_callbacks");</script><noscript><div><img src="//mc.yandex.ru/watch/14324677?ut=noindex" style="position:absolute;left:-9999px;" alt=""/></div></noscript>
<script type="text/javascript">$(document).on("ym-reach-goal",function(d,c,b){yaCounter14324677.reachGoal(c,{label:b**)**);</script>
</body>
</html>
[/code]

perpetum 17.04.2018 08:33

[quote=migi;45512022]CHECK_KA.ERT[/quote]
Спасибо, попробую, но это будет обращение к другому серверу (не контур-фокус) и там запросы только по готовым ИНН, КПП, а можно ли по наименованию контрагента, ОГРН и можно ли в ответе получить адрес и другие реквизиты контрагента?
- Как получить список всех возможных реквизитов в ответе?

migi 17.04.2018 08:34

ответ на запрос, файл полностью - [url]http://rgho.st/76FmWnnWw[/url]

perpetum 17.04.2018 08:41

19-migi > - имеется в виду чтение кода из экранной формы через меню по правой кнопке мыши "Просмотр кода страницы" ? - это да...
Или каким образом была получена кодовая часть "успешно возвращает"?

migi 17.04.2018 08:42

[quote=perpetum;45512075]Спасибо, попробую, но это будет обращение к другому серверу (не контур-фокус) и там запросы только по готовым ИНН, КПП, а можно ли по наименованию контрагента, ОГРН и можно ли в ответе получить адрес и другие реквизиты контрагента? - Как получить список всех возможных реквизитов в ответе?[/quote]предлагаете все это расписывать здесь? - скайп

migi 17.04.2018 08:45

значения для
[code]
https://focus.kontur.ru/search?query="+Наименование_+"&region="+?(ВыбРегио н.Выбран()=1,Число(ВыбРегион.Код),"")+"&industry=" +"&state=081077917";
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
???
[/code]
пример?

migi 17.04.2018 09:00

уважаемый, это [url]https://in***art.ru/public/336256/[/url] не серьёзно.

perpetum 17.04.2018 12:51

25-migi > - это пока на редактировании, если удастся исправить ситуацию с запросом - выложу.

migi 20.04.2018 11:22

26-perpetum >[url]https://fo***ru/forum9/topic190853/[/url]

perpetum 20.04.2018 16:07

27-migi >Для желающих подключиться на форуме инфостарт:
[url]https://forum.infostart.ru/forum9/topic190853/[/url]

perpetum 23.04.2018 03:32

На текущий момент нашел, что если запрос сделать командой:
1. - ЗапуститьПриложение(СтрокаЗапроса),
то в одностраничном ответе по запросу, сразу в строке браузера получим URL. Затем, можно ввести URL в качестве строки запроса, получим ответ сервера в нужном формате для парсинга по реквизитам контрагента.
Если строка запроса в команде:
2. - ЗапуститьПриложение(СтрокаЗапроса) является многостраничной - содержит множество ссылок на URL, тогда можно копировать конкретный URL со страницы для последующего поиска - как в одностраничном запросе.
Собственно, всё сводится к получению списка URL веб-страницы.
- Таким образом, нужен скрипт для чтения URL из веб-страницы.


Текущее время: 03:30. Часовой пояс GMT +3.