Имя: Пароль:
1C
1С v8
1C 8.2 и WinHttp (https, сертификат)
0 kupava
 
30.04.15
13:20
Понадобилоь моему клиенту програмно обрабатывать страницу закрытого портала.
Это рабочий пример решения одной задачи.
Может быть кому то пригодится...


    Сервер  = "dealers.ligazakon.ua";    
    Ресурс1 = "/DEALERS%5CL_dealers2.nsf/vAllTehnoPageWeb1/GroupOrder"; // именно та страница, которую нужно получить и обработать программно.

        // Это диллерский портал, поэтому закрыт авторизацией
    Пользователь  = "12589887UT";  // как пример
    Пароль        = "jESf_042015"; // как пример
    
    Если ПустаяСтрока(Сервер) + ПустаяСтрока(Пользователь) + ПустаяСтрока(Пароль) > 0 Тогда
        Сообщить("Не заданы параметры соединения с сайтом!");
        Возврат;
    КонецЕсли;

        // Здесь все просто
    WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
    WinHttp.Option(2,"Windows-1251");
    
        // Кроме того портал использует такого сертификата.
    Скрипт  = Новый COMОбъект("MSScriptControl.ScriptControl");
    Скрипт.language="javascript";
    Скрипт.AddObject("WinHttp",WinHttp);
    Скрипт.Eval("WinHttp.Option(2)=1251");
    Скрипт.Eval("WinHttp.Option(4)=13056");//intSslErrorIgnoreFlags
    Скрипт.Eval("WinHttp.Option(6)=true");//blnEnableRedirects
    Скрипт.Eval("WinHttp.Option(12)=true");//blnEnableHttpsToHttpRedirects
    
    Попытка
        WinHttp.Open("GET","https://"; + Сервер + Ресурс1, 0);          
        Кодировка = "base64";
                // После подключения к серверу необходимо авторизоваться
                // таким способом. Закодировать результат сложения строк(пароль и логин) с помощью base64
                // и передать их в заголовки.
        ЛогинПароль = Кодировать(Пользователь+":"+Пароль,Кодировка);
        WinHttp.SetRequestHeader("Authorization"," Basic "+Строка(ЛогинПароль));        
        WinHttp.Send();
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    ВременныйФайл = "D:/GroupOrder.html";
    
    ФайлTXT    = Новый ТекстовыйДокумент;
    ФайлTXT.УстановитьТекст(WinHttp.ResponseText());
    ФайлTXT.Записать(ВременныйФайл);

Надеюсь кому-нибудь поможет.
1 kupava
 
30.04.15
13:22
Функция Кодировать(Стр, Кодировка)
    ЦДО=Новый COMОбъект("CDO.Message");
    БодиПарт=ЦДО.BodyPart;
    Поля=БодиПарт.Fields;
    Поле=Поля.Item("urn:schemas:mailheader:content-type");
    Поле.Value="text/plain; charset=""windows-1251""";
    Поля.Update();
    Стрим = БодиПарт.GetDecodedContentStream();
    Стрим.charset = "windows-1251";
    Стрим.WriteText(Стр);
    Стрим.Flush();
    БодиПарт.ContentTransferEncoding = Кодировка;
    Стрим=БодиПарт.GetEncodedContentStream();
    Возврат Стрим.ReadText();
КонецФункции   // Кодировать64(Стр)