Получение html кода web страницы с помощью http запроса
Коллеги, доброго времени суток!
При попытке получить html код веб страницы с помощью http запроса получаю непонятные символы в ответе. В постмане запрос выполняется нормально и в ответе читаемый html текст.
использую такой код для запроса:
Ответ с такими вот символами: n� ��}ksǵ�w�
При попытке получить html код веб страницы с помощью http запроса получаю непонятные символы в ответе. В постмане запрос выполняется нормально и в ответе читаемый html текст.
использую такой код для запроса:
Сервер = "www.wildberries.ru";
Соединение = Новый HTTPСоединение(Сервер,,,,,, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос("/catalog/34939243/detail");
Ответ =Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
Содержимое= Ответ.ПолучитьТелоКакСтроку("UTF8");
Ответ с такими вот символами: n� ��}ksǵ�w�
По теме из базы знаний
Найденные решения
(2)
Использовал вот такой код:
Использовал вот такой код:
Содержимое= Ответ.ПолучитьТелоКакДвоичныеДанные();
///////////////////////////////////////////
РазмерПрефиксаGZip = 10;
РазмерПостфиксаGZip = 8;
ЧтениеДанных = Новый ЧтениеДанных(Содержимое);
ЧтениеДанных.Пропустить(РазмерПрефиксаGZip);
РазмерСжатыхДанных = ЧтениеДанных.ИсходныйПоток().Размер() - РазмерПрефиксаGZip - РазмерПостфиксаGZip;
ПотокZip = Новый ПотокВПамяти(ZipРазмерLFH() + РазмерСжатыхДанных + ZipРазмерDD() + ZipРазмерCDH() + ZipРазмерEOCD());
ЗаписьДанных = Новый ЗаписьДанных(ПотокZip);
ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipLFH());
ЧтениеДанных.КопироватьВ(ЗаписьДанных, РазмерСжатыхДанных);
ЗаписьДанных.Закрыть();
ЗаписьДанных = Новый ЗаписьДанных(ПотокZip);
CRC32 = ЧтениеДанных.ПрочитатьЦелое32();
РазмерНесжатыхДанных = ЧтениеДанных.ПрочитатьЦелое32();
ЧтениеДанных.Закрыть();
ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipDD(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных));
ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipCDH(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных));
ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipEOCD(РазмерСжатыхДанных));
ЗаписьДанных.Закрыть();
Каталог = ПолучитьИмяВременногоФайла();
ЧтениеZip = Новый ЧтениеZipФайла(ПотокZip);
ИмяФайла = ЧтениеZip.Элементы[0].Имя;
Попытка
ЧтениеZip.Извлечь(ЧтениеZip.Элементы[0], Каталог, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
Исключение
// Игнорируем проверку целостности архива, просто читаем результат
ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
ЧтениеZip.Закрыть();
Результат = Новый ДвоичныеДанные(Каталог + ПолучитьРазделительПути() + ИмяФайла);
УдалитьФайлы(Каталог);
Нашрез = Base64Строка(Результат);
Показать
(4)Так вы читаете файл как Base64, зачем?
Вместо
Читайте файл Каталог + ПолучитьРазделительПути() + ИмяФайла через ЧтениеТекста
P.S. В 8.3.26 появится нативная поддержка распаковки GZIP и RAR
Вместо
Результат = Новый ДвоичныеДанные(Каталог + ПолучитьРазделительПути() + ИмяФайла);
УдалитьФайлы(Каталог);
Нашрез = Base64Строка(Результат);
УдалитьФайлы(Каталог);
Нашрез = Base64Строка(Результат);
Читайте файл Каталог + ПолучитьРазделительПути() + ИмяФайла через ЧтениеТекста
P.S. В 8.3.26 появится нативная поддержка распаковки GZIP и RAR
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Ответ приходит сжатым в gzip.
Платформа не умеет распаковывать ответ в gzip.
identity в Accept-Encoding не сработало, все равно сервер шлет в gzip.
Как вариант - получить тело как двоичные данные, двоичные данные сохранить как zip-архив. Внутри архива будет файл, который содержит в себе несжатые данные.
P.S. сейчас, когда большая часть страницы генерится на лету с помощью JS, особого смысла получать содержимое страницы через httpсоединение нет, там все равно будет пустышка.
Платформа не умеет распаковывать ответ в gzip.
identity в Accept-Encoding не сработало, все равно сервер шлет в gzip.
Как вариант - получить тело как двоичные данные, двоичные данные сохранить как zip-архив. Внутри архива будет файл, который содержит в себе несжатые данные.
P.S. сейчас, когда большая часть страницы генерится на лету с помощью JS, особого смысла получать содержимое страницы через httpсоединение нет, там все равно будет пустышка.
(2)
Использовал вот такой код:
Использовал вот такой код:
Содержимое= Ответ.ПолучитьТелоКакДвоичныеДанные();
///////////////////////////////////////////
РазмерПрефиксаGZip = 10;
РазмерПостфиксаGZip = 8;
ЧтениеДанных = Новый ЧтениеДанных(Содержимое);
ЧтениеДанных.Пропустить(РазмерПрефиксаGZip);
РазмерСжатыхДанных = ЧтениеДанных.ИсходныйПоток().Размер() - РазмерПрефиксаGZip - РазмерПостфиксаGZip;
ПотокZip = Новый ПотокВПамяти(ZipРазмерLFH() + РазмерСжатыхДанных + ZipРазмерDD() + ZipРазмерCDH() + ZipРазмерEOCD());
ЗаписьДанных = Новый ЗаписьДанных(ПотокZip);
ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipLFH());
ЧтениеДанных.КопироватьВ(ЗаписьДанных, РазмерСжатыхДанных);
ЗаписьДанных.Закрыть();
ЗаписьДанных = Новый ЗаписьДанных(ПотокZip);
CRC32 = ЧтениеДанных.ПрочитатьЦелое32();
РазмерНесжатыхДанных = ЧтениеДанных.ПрочитатьЦелое32();
ЧтениеДанных.Закрыть();
ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipDD(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных));
ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipCDH(CRC32, РазмерСжатыхДанных, РазмерНесжатыхДанных));
ЗаписьДанных.ЗаписатьБуферДвоичныхДанных(ZipEOCD(РазмерСжатыхДанных));
ЗаписьДанных.Закрыть();
Каталог = ПолучитьИмяВременногоФайла();
ЧтениеZip = Новый ЧтениеZipФайла(ПотокZip);
ИмяФайла = ЧтениеZip.Элементы[0].Имя;
Попытка
ЧтениеZip.Извлечь(ЧтениеZip.Элементы[0], Каталог, РежимВосстановленияПутейФайловZIP.НеВосстанавливать);
Исключение
// Игнорируем проверку целостности архива, просто читаем результат
ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
ЧтениеZip.Закрыть();
Результат = Новый ДвоичныеДанные(Каталог + ПолучитьРазделительПути() + ИмяФайла);
УдалитьФайлы(Каталог);
Нашрез = Base64Строка(Результат);
Показать
(4)Так вы читаете файл как Base64, зачем?
Вместо
Читайте файл Каталог + ПолучитьРазделительПути() + ИмяФайла через ЧтениеТекста
P.S. В 8.3.26 появится нативная поддержка распаковки GZIP и RAR
Вместо
Результат = Новый ДвоичныеДанные(Каталог + ПолучитьРазделительПути() + ИмяФайла);
УдалитьФайлы(Каталог);
Нашрез = Base64Строка(Результат);
УдалитьФайлы(Каталог);
Нашрез = Base64Строка(Результат);
Читайте файл Каталог + ПолучитьРазделительПути() + ИмяФайла через ЧтениеТекста
P.S. В 8.3.26 появится нативная поддержка распаковки GZIP и RAR
(5)
Спасибо! Действительно, код исходной страницы я увидеть смог, но как вы и заметили ранее, страница формируется динамически и сразу конечный результат я получить не смог. Не думал я, что так нелегко окажется читать веб страницы, раньше как то не приходилось сталкиваться с задачами такого рода.
Спасибо! Действительно, код исходной страницы я увидеть смог, но как вы и заметили ранее, страница формируется динамически и сразу конечный результат я получить не смог. Не думал я, что так нелегко окажется читать веб страницы, раньше как то не приходилось сталкиваться с задачами такого рода.
(5)
нашел способ для получения текста страницы, попроще:
Вдруг кому нибудь пригодится.
нашел способ для получения текста страницы, попроще:
WinHttp = Новый COMОбъект("MSXML2.xmlHttp");
WinHttp.Open("GET", "https://www.wildberries.ru/catalog/34939243/detail", 0);
WinHttp.Send();
Если WinHttp.Status = 200 Тогда
РезультатСтр = WinHttp.ResponseText();
КонецЕсли;
Вдруг кому нибудь пригодится.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот