Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9

GZIP распаковка веб страницы

29.05.2013, 01:19. Показов 2175. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите перевести код с Delphi на С++
Вот сам код:
Delphi
1
2
3
4
5
6
HeadersToList(http.Headers); // полезная функция, позволяет перевести заголовок в параметрический вид
if trim(http.Headers.Values['Content-Encoding']) = 'gzip' then // если ответ пришел в сжатом виде
 begin
  str := ReadStrFromStream(http.Document, http.Document.Size); // считываем тело документа
  str := GZDecompressStr(str); // распаковываем его
 end;
В коде используется библиотека ZLIB.

Сам использую вот эту версию библиотеки:
Внизу страницы

Вот весь код,на всякий случай.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
uses
  httpsend,
  ZLibExGZ,
 *synautil;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  http: THTTPSend;
  str: string;
begin
  http := THTTPSend.Create;
  HTTP.Protocol := '1.1'; // указываем версию HTTP протокола
  http.Headers.Add('Accept-Encoding: gzip'); // указываем, что хотим получить сжатые данные
  http.HTTPMethod('GET', 'http://www.afisha.ru/');
  HeadersToList(http.Headers); // полезная функция, позволяет перевести заголовок в параметрический вид
  if trim(http.Headers.Values['Content-Encoding']) = 'gzip' then // если ответ пришел в сжатом виде
  begin
    str := ReadStrFromStream(http.Document, http.Document.Size); // считываем тело документа
    str := GZDecompressStr(str); // распаковываем его
  end;
  str := '';
end;
end.
Использую Синапс.
Зарание благодарю за помощь...
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.05.2013, 01:19
Ответы с готовыми решениями:

Текст веб-страницы в программе
Есть сайт, на сайте различные блоки <div>. Можно ли один необходимый нам <div> записать в программу? *Там только текст. Есть ли...

CppWebBrowser. Загрузка веб-страницы в целевой Фрейм
Доброго времени суток. Возникла у меня такая проблема, на форме у меня есть 2 кнопки и CppWebBrowser. И есть несколько html страниц, одна...

Как сохранить часть HTML кода с веб страницы?
Веб-страница с результатами поиска, к примеру 50 ссылок. Мне нужно сохранить все ссылки. Открываю страницу с помощью CppWebBrowser,...

10
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.05.2013, 01:28
C++
1
2
3
4
5
6
HeadersToList(http->Headers); // полезная функция, позволяет перевести заголовок в параметрический вид
if (Trim(http->Headers->Values['Content-Encoding']) == "gzip") { // если ответ пришел в сжатом виде
// String str;
  str = ReadStrFromStream(http->Document, http->Document->Size); // считываем тело документа
  str = GZDecompressStr(str); // распаковываем его
}
А теперь выкладывайте ругательства .
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
29.05.2013, 01:38  [ТС]
HeadersToList такой функции в си нет!? Не так ли?
GZDecompressStr с ней также проблемы,так как не обнаружил ее в библиотеке.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.05.2013, 01:51
C++
1
2
3
4
FILE_STREAM = new TFileStream(FILE_NAME,fmCreate | fmOpenRead);
IdHTTP1->Get(URL_DOWNLOAD,FILE_STREAM);
delete FILE_STREAM;
Memo1->Text= IdHTTP1->Response->RawHeaders->Text;
А ваш синапс, видать, надо утсановить для билдера. Народ пробовал, говорят, получается.
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
29.05.2013, 12:03  [ТС]
А зачем тогда код на инди привели?

Добавлено через 6 минут
С HeadersToList кажись понятно,он в синапсе где-то есть. LK натолкнул на мысль.
А вод с распаковкой страницы пока что-никак.

Добавлено через 4 часа 15 минут
Компилятор ругается на строчку:
C++
1
if (Trim(http->Headers->Values['Content-Encoding']) == "gzip")
HTML5
1
2
[C++ Warning] Unit1.cpp(282): W8098 Multi-character character constant
[C++ Error] Unit1.cpp(282): E2129 Character constant too long (or empty)
И на нее тоже:
C++
1
str = GZDecompressStr(str);
Какая есть функция декомпиляции?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.05.2013, 19:30
Цитата Сообщение от Gdasar Посмотреть сообщение
А зачем тогда код на инди привели?
- затем, что инди - нативное решение для с++ билдера без лишних телодвижений.

Цитата Сообщение от Gdasar Посмотреть сообщение
Компилятор ругается
потому, что в С++ односимвольные константы заключаются в одинарные кавычки, а многосимвольные, строки - в двойные, т.е.,
C++
1
if (Trim(http->Headers->Values["Content-Encoding"]) == "gzip")
Цитата Сообщение от Gdasar Посмотреть сообщение
И на нее тоже:
- тоже -
Multi-character
?
1
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
30.05.2013, 00:09  [ТС]
Нашел,что распаковка осуществляется функцией uncompress.
При ее использовании:
C++
1
2
3
4
AnsiString str;  
....
....
str = uncompress(str);
HTML5
1
2
3
[C++ Error] Unit1.cpp(285): E2034 Cannot convert 'AnsiString' to 'unsigned char *'
[C++ Error] Unit1.cpp(285): E2342 Type mismatch in parameter 'dest' (wanted 'unsigned char *', got 'AnsiString')
[C++ Error] Unit1.cpp(285): E2193 Too few parameters in call to 'uncompress(unsigned char *,unsigned long *,const unsigned char *,unsigned long)'
Что-то разобраться не могу(запутался в типах). Прошу помощи.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.05.2013, 00:17
видимо, просит оно не
C++
1
AnsiString str;
а
C++
1
unsigned char str[255];
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
30.05.2013, 00:23  [ТС]
Теперь ругается на строчку
C++
1
str = ReadStrFromStream(http->Document, http->Document->Size);
HTML5
1
2
3
[C++ Error] Unit1.cpp(285): E2277 Lvalue required
[C++ Error] Unit1.cpp(286): E2193 Too few parameters in call to 'uncompress(unsigned char *,unsigned long *,const unsigned char *,unsigned long)'
[C++ Error] Unit1.cpp(286): E2277 Lvalue required
А unsigned char str[255]; может привысить 255?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.05.2013, 00:29
Цитата Сообщение от Gdasar Посмотреть сообщение
Too few parameters
- http://translate.google.com/
Цитата Сообщение от Gdasar Посмотреть сообщение
А unsigned char str[255]; может привысить 255?
Вам - сюда:
Основные типы C++
Библиотека VCL и сопутствующие материалы
Путеводитель по книжкам про C++ Builder
0
191 / 52 / 19
Регистрация: 18.02.2013
Сообщений: 508
Записей в блоге: 9
30.05.2013, 00:40  [ТС]
Я не знаю,какие еще данные передовать в uncompress. Литературы также не нашел
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.05.2013, 00:40
Помогаю со студенческими работами здесь

Веб-браузер, периодически открывающий страницы и выполняющий поиск по ключевым словам
Доброго времени суток. Вопрос такой: есть браузер на c++ builder и нужно сделать так, чтобы он с каким-то интервалом времени открывал...

HTTP: скорость загрузки сайта, размер веб-страницы, количество файлов
здраствуйте, у меня возникло ряд вопросов: буду делать дипломную работу, для етого думаю написать програму, кторая сможет следуючее: 1....

Распаковка GZip из веб запроса
Доброго времени суток. пишу свой прокси сервер. Говорю сразу,для своих нужд. Данный сервер должен вставлять в страницу ответа браузеру,...

Использование GZip для сжатия текста веб-страницы
Добрый вечер, форумчане! Прошу вашей помощи. Решения из похожих тем мне не помогли. Есть метод public static string GetURL(string...

PrestaShop Распаковка gzip архивов
Всем привет :) Использую CMS магазин prestashop и в ней есть импорт языков. Язык содержится в архиве gzip :( когда пытаюсь его...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru