Имя: Пароль:
1C
1С v8
Получение HTML по https протоколу
0 iksanov
 
14.07.16
05:59
Всем привет!

Есть кусок кода, который получает разметку html по https, для яндекса работает корректо, но проблема для гугля не работает никак, кто может посоветовать куда копать?

    //стрURL = "https://yandex.ru/maps";;
    //стрURL = "https://google.ru/maps";;
    стрURL = "https://www.google.ru/maps";;
    
    // вычислить адрес сервера из адресной сторки
    АдресСервера1 = СтрЗаменить(стрURL, "https://"; ,"");  
    индексСлеша  = Найти(АдресСервера1, "/");
    АдресСервера = Сред(АдресСервера1, 0 ,индексСлеша - 1);

    // вычислить строку URL
    длинаСтроки = СтрДлина(АдресСервера1);
    URL = "/" + Прав(АдресСервера1, длинаСтроки -  индексСлеша);

    // установим правильные заголовки соединения  
    ЗаголовокGET = Новый Соответствие();
    ЗаголовокGET.Вставить("GET " + URL + " HTTP/1.1");
    ЗаголовокGET.Вставить("Host", АдресСервера);
    ЗаголовокGET.Вставить("User-Agent","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; InfoPath.3; .NET4.0E)");    
    ЗаголовокGET.Вставить("Cookie","ps_gch=123.... ДАЛЕЕ ВАШИ ЗНАЧЕНИЯ Cookie ");

    Сообщить("АдресСервера:" + АдресСервера);
    Сообщить("URL:" + URL);
    Сообщить("Cookie:" + СтрЗаменить(ЗаголовокGET["Cookie"],"; ",Символ(13)));
    Сообщить("Попытка...");

    Попытка
        ssl = Новый ЗащищенноеСоединениеOpenSSL();
        HTTPСоединение = Новый HTTPСоединение(АдресСервера, 443 , , , , 5, ssl);        
        HTTPЗапрос = Новый HTTPЗапрос(URL, ЗаголовокGET);
        HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
        КодСостояния = HTTPОтвет.КодСостояния;
        responseText = HTTPОтвет.ПолучитьТелоКакСтроку();
        Сообщить(КодСостояния);
        Сообщить(responseText);
    Исключение
        Сообщить("Не удалось установить соединение с сервером :"
            + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
    КонецПопытки;

Вот для Яши:
http://saveimg.ru/pictures/14-07-16/f1edbf6419d1221de9dcb226c596b0be.JPG

Для Гугла:
http://saveimg.ru/pictures/14-07-16/7a692232c1e89aa3a72a8fde3ae8cd15.JPG

Может порт не тот для гугла?
1 SiAl-chel
 
14.07.16
07:45
(0) Я бы поигрался с разными параметрами метода
Новый HTTPСоединение(АдресСервера, 443 , , , , 5, ssl);
Может тут надо другие параметры указывать. Потому что даже до сервера подцепиться не можешь, чтобы он ответ дал.
2 iksanov
 
14.07.16
13:32
Да тоже склоняюсь к этому, но ничего не подходит
3 H A D G E H O G s
 
14.07.16
13:36
Сервер требует сертификат?
4 Serginio1
 
14.07.16
13:59
Если что
.Net в 1С. Парсинг сайтов, multipart/form-data, gzip итд

врап=новый COMОбъект("NetObjectToIDispatch45");
    HttpClient=Врап.ПолучитьТипИзСборки("System.Net.Http.HttpClient","System.Net.Http.dll");
  
  
  handler = врап.СоздатьОбъект("System.Net.Http.HttpClientHandler");
  DecompressionMethods= Врап.ПолучитьТип("System.Net.DecompressionMethods");
  handler.AutomaticDecompression=Врап.OR(DecompressionMethods.GZip,DecompressionMethods.Deflate) ;
  
  Клиент=Врап.СоздатьОбъект(HttpClient,handler);

  Стр=Клиент.GetStringAsync("https://www.google.ru/maps").Result;
  Сообщить(СтрДлина(Стр));

//Клиент.Dispose();
  Врап.ЗакрытьРесурс(Клиент);
5 iksanov
 
14.07.16
16:30
(3) хз но без этогго
ssl = Новый ЗащищенноеСоединениеOpenSSL();
HTTPСоединение = Новый HTTPСоединение(АдресСервера, 443 , , , , 5, ssl);

вот так
HTTPСоединение = Новый HTTPСоединение(АдресСервера, , , , , , Истина);
Не прокатило с яндексом и с гуглом тоже
6 Serginio1
 
14.07.16
16:44
Возможно гугл работает по протоколу TLS, который 1С не понимает?

https://ru.wikipedia.org/wiki/TLS
7 Serginio1
 
14.07.16
16:45
8 iksanov
 
14.07.16
18:25
(4) Там со списком прокси можно работать? Просто я могу и через COMОбъект IE работать, но там со списком прокси непонятно как организовать работу, а через HTTPСоединение все просто, но оно не дружит с протоколом гугля)
9 Serginio1
 
14.07.16
19:33
10 Serginio1
 
14.07.16
19:36
11 iksanov
 
15.07.16
07:10
(4) Чет код твой не взлетел, не нашел наверное Ком объект.

{Форма.Форма.Форма(3)}: Ошибка при вызове конструктора (COMОбъект)
    врап=новый COMОбъект("NetObjectToIDispatch45");
по причине:
Недопустимая строка с указанием класса
12 Serginio1
 
15.07.16
07:29
Значит ты новичок.
Использование классов .Net в 1С для новичков
там есть ссылка в шапке
13 iksanov
 
16.07.16
03:26
короче все норм https заработал, надо было обновить платформу до последнего релиза)
Закон Брукера: Даже маленькая практика стоит большой теории.