Можно ли с помощью компоненты v7plus читать файлы по протоколу https

1. AndKovalchuk 192 08.10.17 14:28 Сейчас в теме
При попытке прочитать файл

	Попытка
        	Соединение = СоздатьОбъект("Addin.V7HttpReader") ;
        	Соединение.КоличествоПопытокАвторизации = 3;
    	Исключение 
        	Сообщить("Не удалось создать объект Addin.V7HttpReader!");
        	Возврат;
	КонецПопытки;
	Если ПустаяСтрока(КаталогДанных)=-0 Тогда
		   КаталогДанных = КаталогВременныхФайлов();  
	КонецЕсли;
    
  	Попытка                     
  			Ресурс="https://www.nalog.ru/html/sites/www.new.nalog.ru/docs/sprav/TNVED.7z"; 	
        	Соединение.ПолучитьКакФайл(Ресурс,КаталогДанных+"TNVED.7z");   
        Исключение 
        	Сообщить("Неудачная попытка соединения.");
        	Сообщить(Соединение.СтрокаСостоянияОтвета) ;
        	Возврат;                   
    	КонецПопытки;
    	Если ФС.СуществуетФайл(КаталогДанных+"TNVED.7z")=0 Тогда
        	Сообщить("Не удалось получить ответ с сайта. Проверьте интернет соединение."); 
        	Возврат;
	КонецЕсли;   
Показать


возникает следующая ошибка


Компонента V7Plus : Попытка использования недопустимого протокола обмена - https://www.nalog.ru/html/sites/www.new.nalog.ru/docs/sprav/TNVED.7z
Неудачная попытка соединения.

По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Поручик 4675 08.10.17 20:53 Сейчас в теме
Используйте обычный http протокол http://www.nalog.ru/html/sites/www.new.nalog.ru/docs/sprav/TNVED.7z
По крайней мере, браузером файл TNVED.7z скачивается без вопросов.
3. AndKovalchuk 192 09.10.17 12:12 Сейчас в теме
(2)

Браузер сам преобразует.

А вот когда это делает 1с, то выдается сообщение:

Компонента V7Plus : Ресурс http://www.nalog.ru/html/sites/www.new.nalog.ru/docs/sprav/TNVED.7z перенесен на https://www.nalog.ru/html/sites/www.new.nalog.ru/docs/sprav/TNVED.7z
Неудачная попытка соединения.
HTTP/1.1 301 Moved Permanently
4. AndKovalchuk 192 09.10.17 12:14 Сейчас в теме
В общем, если я правильно понимаю, что vplus c защищенным протоколом https работать не умеет, и придется изучать get-запрос.
6. Поручик 4675 09.10.17 13:21 Сейчас в теме
(4) Какая разница? То, что вы привели в первом посте и есть get-запрос.
AndKovalchuk; +1 Ответить
7. AndKovalchuk 192 09.10.17 14:31 Сейчас в теме
(6) А каким образом тогда можно скачать файл?
5. AndKovalchuk 192 09.10.17 12:42 Сейчас в теме
8. sCHTASS 49 09.10.17 16:48 Сейчас в теме
9. AndKovalchuk 192 10.10.17 11:44 Сейчас в теме
(8) Ну у меня же не динамическая страница. А просто зашифрованный определенным сертификатом протокол. Что такое HTTPS


Первое, что делает браузер при установке соединения по протоколу HTTPS, это проверку подлинности сертификата, и только в случае успешного ответа начинается обмен данными.


Интересно, а 8.3 умеет работать с этим протоколом и есть ли примеры?
13. sCHTASS 49 10.10.17 15:45 Сейчас в теме
(9) Там примеры нескольких способов загрузки. Можно попробовать различные.
10. AndKovalchuk 192 10.10.17 11:54 Сейчас в теме
11. AndKovalchuk 192 10.10.17 12:25 Сейчас в теме
И вот тут написано, как добавить в 1С сертификат для обмена с сайтом по HTTPS.
Но я так понимаю для 1с 8.2/8.3

https://www.cs-cart.ru/docs/4.3.x/manager/commerceml/1c/https/
12. AndKovalchuk 192 10.10.17 13:07 Сейчас в теме
Кстати, вот так срабатывает, но скачанный файл обрезается до 1 кб.

Процедура СкачатьФайл(Адрес, СкачанныйФайл,Proxy)
    wHTTP = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
    Если ПустоеЗначение(Proxy)  = 0 Тогда
        wHTTP.SetProxy(2,СокрЛП(Proxy));
    КонецЕсли;
    RequestTimeout = 6;
    wHTTP.Open("GET",Адрес,1);
    wHTTP.Send();
    Рез = wHTTP.WaitForResponse(RequestTimeout);
    Если Рез = -1 Тогда
        Ответ = СокрЛП(wHTTP.ResponseText());
        Файл = СоздатьОбъект("Текст");
        Файл.ДобавитьСтроку(Ответ);
        Файл.Записать(СкачанныйФайл);
    Иначе
        Сообщить("Нет ответа");
        СтатусВозврата(0);
    КонецЕсли;
КонецПроцедуры // СкачатьФайл()




Процедура ПрочитатьРазделы() 
	
	Если СкачатьсСайта=1 Тогда  
		
		Если ПустаяСтрока(КаталогДанных)=1 Тогда
		   КаталогДанных = КаталогВременныхФайлов();  
		КонецЕсли;
	    Ресурс="http://www.nalog.ru/html/sites/www.new.nalog.ru/docs/sprav/TNVED.7z";
		Путь=КаталогДанных+"\TNVED.7z";  
		
		СкачатьФайл(Ресурс,Путь,"ххх.ххх.х.хххх:8080");
        КонецЕсли;
КонецПроцедуры
Показать
14. AndKovalchuk 192 16.10.17 13:08 Сейчас в теме
Ну как я понял, судя по тому, что сервис "1с:Отчетность" для 7.7 Бухгалтерии предоставляется через программу посредник "1С:Налогоплательщик 7.7", то с защищенных протоком v7plus работать не умеет. А если ли другие внешние библиотеки для 7.7, которые умеют?
15. elfsoft 16.11.20 16:14 Сейчас в теме
Сегодня столкнулся с такой же ситуацией на 1С v7.7 (обновление курсов валют с сайта www.nbrb.by, который раньше работал по HTTP, перестало работать, поскольку сайт стал работать только по https)
В качестве костыля заиспользовал stunnel, установив его на комп с 1C-кой и добавив в его конфигурационный файл строчки вида
[nbrb-https]
client = yes
accept = 127.0.0.1:11080
connect = www.nbrb.by:443
verifyChain = no
CAfile = ca-certs.pem

В самой конфигурации 1C в исходниках модуля исправил строчку с
HTTPСервис.ПолучитьКакФайл
, заменив в URL www.nbrb.by на 127.0.0.1:11080 (это локальный адрес компа, где запускается 1C).
Принцип действия stunnel - он слушает локальный порт (в данном случае - 11080); при подключении на него клиента (который не умеет работать с защищёнными соединениями) сам соединяется с целевым сайтом (в данном случае - www.nbrb.by) по SSL-протоколу, проверяет сертификаты и т.д. и шифрует трафик между приложением (1С) и сайтом.
verifyChain = no
я поставил вполне осознанно, для ускорения подключения (вообще по-хорошему сертификаты нужно проверять :) ).
Единственный технический нюанс: get-запрос идёт уже по защищённому соединению, и в get-запросе, кроме всего прочего, указывается имя хоста (в данном случае - в виде строчки "Host:www.nbrb.by") - это нужно для веб-серверов, на которых одновременно хостится несколько сайтов на одном IP. Так вот, если серверу не всё равно, что именно ему отправляют в поле "Host:" get-запроса, то вышеприведённая схема работать не будет (целевому серверу в строчке Host будет вместо www.nbrb.by отправлено 127.0.0.1). В этом случае придётся подменять DNS, в C:\Windows\system32\drivers\etc\hosts прописав строчку
www.nbrb.by 127.0.0.1

но в этом случае в конфигурации stunnel нужно указать стандартный порт 80 в строчке accept, а в строчке connect - IP-адрес (а не имя!) нужного сайта (ну или имя, но НЕ совпадающее с www.nbrb.by, поскольку система после модификации файла hosts будет всегда возвращать для этого имени адрес 127.0.0.1). Строчка с конфигурацией в этом случае будут выглядеть так:
accept = 127.0.0.1:80
connect = nbrb.by:443
(в случае, если IP-адрес www.nbrb.by совпадает с IP-адресом nbrb.by)
или
connect = 212.98.162.9:443
(IP-адрес можно узнать с помощью команды ping или nslookup - но он может измениться через какое-то время, так что это нужно иметь ввиду)
и тогда ВСЕ приложения (не только 1C), которые будут пытаться лезть на www.nbrb.by по http-протоколу, будут попадать в stunnel, который будет заворачивать их на настоящий сайт уже по https-протоколу.
Ну и да, при этом на локальном компе не должно быть других программ, слушающих порт 80 (но зато в самой конфигурации 1C в этом случае вообще ничего менять не нужно).
...Объяснил сложновато и разжёванно, но, может, кому-то пригодится :)
фокусник; Hexed; 1v7; gerg; svilsa; +5 Ответить
16. user1362187 29.01.21 20:34 Сейчас в теме
(15)
Сегодня столкнулся с такой же ситуацией на 1С v7.7 (обновление курсов валют с сайта www.nbrb.by, который раньше работал по HTTP, перестало работать, поскольку сайт стал работать только по https)

Дружище, благодаря этому посту решил ту же проблему. Респект!
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот