Russian Qt Forum
Ноябрь 23, 2024, 23:22
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
qnetworkaccessmanager и gzip
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: qnetworkaccessmanager и gzip (Прочитано 13900 раз)
eldar85
Гость
qnetworkaccessmanager и gzip
«
:
Декабрь 12, 2010, 21:22 »
Добрый день. Столкнулся с такой проблемой - работаю с сетью через qnetworkaccessmanager. программка должна загружать страничку сжатую в gzip, а вот распаковать ее не получается.
Причем страничка обязательно должна быть сжата ( в заголовке запроса должен быть request.setRawHeader("Accept-Encoding", "gzip"); ) потому что иначе ответ пустой. Есть ли специальный функции у Qt для расспаковки таких страниц?
Записан
BRE
Гость
Re: qnetworkaccessmanager и gzip
«
Ответ #1 :
Декабрь 12, 2010, 21:25 »
Цитата: eldar85 от Декабрь 12, 2010, 21:22
Есть ли специальный функции у Qt для расспаковки таких страниц?
Попробуй использовать:
QByteArray qUncompress ( const QByteArray & data )
Записан
eldar85
Гость
Re: qnetworkaccessmanager и gzip
«
Ответ #2 :
Декабрь 12, 2010, 21:27 »
пробовал, выдает ошибку qUncompress: Z_DATA_ERROR: Input data is corrupted
Записан
BRE
Гость
Re: qnetworkaccessmanager и gzip
«
Ответ #3 :
Декабрь 12, 2010, 21:30 »
Цитата: eldar85 от Декабрь 12, 2010, 21:27
пробовал, выдает ошибку qUncompress: Z_DATA_ERROR: Input data is corrupted
Ну тогда попробуй саму библиотеку gzip.
Записан
eldar85
Гость
Re: qnetworkaccessmanager и gzip
«
Ответ #4 :
Декабрь 12, 2010, 21:31 »
Вот присылаемый сервером заголовок:
Date: Sun, 12 Dec 2010 18:28:10 GMT
Server: Apache/2
X-Powered-By: PHP/5.2.14
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 20
Keep-Alive: timeout=1, max=100
Connection: Keep-Alive
Content-Type: text/html
Записан
eldar85
Гость
Re: qnetworkaccessmanager и gzip
«
Ответ #5 :
Декабрь 12, 2010, 21:33 »
такого ни разу не пробовал, можно подробнее???
Но ведь webkit как то же распаковывает такие страницы, ниужли сторонними библиотеками...
Записан
BRE
Гость
Re: qnetworkaccessmanager и gzip
«
Ответ #6 :
Декабрь 12, 2010, 21:36 »
Это про qUncompress:
Цитировать
Note: If you want to use this function to uncompress external data compressed using zlib, you first need to prepend four bytes to the byte array that contain the expected length (as an unsigned integer) of the uncompressed data encoded in big-endian order (most significant byte first).
Записан
eldar85
Гость
Re: qnetworkaccessmanager и gzip
«
Ответ #7 :
Декабрь 12, 2010, 21:46 »
как я понял нужно добавить в начало 4 байта информации об ожидаемой длине принимаего контента? Но у меня приходит Content-Length: 20, получается мне сервер всего 20 байт присылает?
Записан
BRE
Гость
Re: qnetworkaccessmanager и gzip
«
Ответ #8 :
Декабрь 12, 2010, 21:50 »
Цитата: eldar85 от Декабрь 12, 2010, 21:33
Но ведь webkit как то же распаковывает такие страницы, ниужли сторонними библиотеками...
Вообще Qt и так собирается с zlib, а вот доступ к ее функционалу ограничен функциями qCompress/qUncompress.
Посмотри реализацию этих функций.
Записан
SimpleSunny
Гость
Re: qnetworkaccessmanager и gzip
«
Ответ #9 :
Декабрь 12, 2010, 22:03 »
Если используете QNAM, то он автоматически распаковывает сжатые страницы, и заботится об этом не нужно.
Записан
eldar85
Гость
Re: qnetworkaccessmanager и gzip
«
Ответ #10 :
Декабрь 12, 2010, 22:31 »
Вот так я и хочу, сейчас поищу инфу про этот QNAM
Записан
SimpleSunny
Гость
Re: qnetworkaccessmanager и gzip
«
Ответ #11 :
Декабрь 12, 2010, 22:41 »
QNetworkAccessManager
Записан
eldar85
Гость
Re: qnetworkaccessmanager и gzip
«
Ответ #12 :
Декабрь 15, 2010, 15:56 »
и все же я не разобрался, какая же функция у QNetworkAccessManager расспаковывает сжатые данные???
Записан
eldar85
Гость
Re: qnetworkaccessmanager и gzip
«
Ответ #13 :
Декабрь 15, 2010, 16:20 »
Цитировать
request.setUrl(QUrl(load_url));
request.setRawHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.12) Gecko/20101026 MRA 5.7 (build 03773) Firefox/3.6.12");
request.setRawHeader("Accept-Encoding", "gzip");
if(!referer.isEmpty())
request.setRawHeader( "Referer", referer );
if(!cookie.isEmpty())
request.setRawHeader( "Cookie", cookie);
if(!proxy.isEmpty() && with_proxy)
{
ip_port = proxy.split(":");
if( ip_port.length() == 2 )
{
tmp = ip_port[1];
port = tmp.toInt();
if( http_socks5 )
manager.setProxy(QNetworkProxy(QNetworkProxy::HttpProxy, ip_port[0], port));
else
manager.setProxy(QNetworkProxy(QNetworkProxy::Socks5Proxy, ip_port[0], port));
}
}
if(post_data.isEmpty())
reply = manager.get( request );
else
reply = manager.post( request, post_data );
QObject::connect( reply, SIGNAL( finished() ), &loop, SLOT( quit() ) );
QObject::connect( &timer, SIGNAL( timeout() ), &loop, SLOT( quit() ) );
timer.start(30000);
loop.exec();
cookie_loaded = reply->rawHeader("Set-Cookie");
location = reply->rawHeader("Location");
buf = reply->readAll();
вот часть моего класса работы с сетью, но он у меня не расспаковывает автоматически gzip или возможно что то сделал я не так
«
Последнее редактирование: Декабрь 15, 2010, 21:32 от eldar85
»
Записан
eldar85
Гость
Re: qnetworkaccessmanager и gzip
«
Ответ #14 :
Декабрь 17, 2010, 06:58 »
хмм и в правду QNAM расспаковывает все, проблема была в моем классе, я после пост запроса не очищал переменную post_data - жесть... странно но я долго не мог заметить этот баг... в программе задействовано достаточно не мало кода, а этот класс достаточно свежий и еще хорошо не протестил его))) но хоть убей не видел этого бага, пока не спя двое суток подряд уже в состоянии "никаком" не взгленул таки на эти строки
Цитировать
if(post_data.isEmpty())
reply = manager.get( request );
else
reply = manager.post( request, post_data );
и проследил весь класс))) получается после первого пост запроса все остальные запросы тоже шли постом)))))))) фак... а я думал из за распаковки такая кака приходит)))))))
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...