crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> wxHTTP - отображение html содержимого
Гость_wxFan_*
сообщение 12.9.2011, 16:00
Сообщение #1





Гости








    


Привет всем! Проблема заключается в отображении содержимого страницы с инета на консоль. Запрос успешно проходит, но вот попытка распаковать содержимое и впихать его в wxString приводит к переполнению wxString объекта. Без отладки это выглядит как пустая консолька, которая через некоторое время валится с ошибкой SIGSEGV. Валится прога после вызова Read. Сам вызов при отлаживании около 5сек происходит (курсор текущей строки отладки пропадает, после чего появляется вместе с SIGSEGV ошибкой на следующей после ...Read строки)
Функция, занимающаяся коннектом
#include заголовок
wxString MyClass::GetPageContent()
{
    wxHTTP *con = new wxHTTP();
    con->SetHeader("User-Agent", юзер агент);
    con->SetHeader("Host", хост);
    con->SetHeader("Accept", "text/html");
    con->SetHeader("Accept-Language", "ru-RU,ru;q=0.9,en;q=0.8");
    con->SetHeader("Accept-Encoding", "gzip, deflate");
              con->SetHeader("Connection", "Keep-Alive");
    con->Connect(хост);
    
    //wxFileOutputStream fileStream("C:\\1.gzip");
    //fileStream.Write(*(con->GetInputStream("/")));
    //fileStream.Close();

    wxByte buf[30000];
    wxZlibInputStream inStream(con->GetInputStream("/"), wxZLIB_GZIP);
    inStream.Read(buf, 30000);
    wxString resp(buf);
    con->GetResponse();
    
    wxDELETE(con);
    return resp;
}


Консолька
#include "App.h"
bool MyApp::OnInit()
{
    MyClass *client = new MyClass();
    wxPuts(client->GetPageContent());
    return true;
}


Если убрать код, занимающийся распаковкой gzip и записью распакованного содержимого в буфер, а взамен раскомментировать 3 строчки, то на хард успешно запишется файл 1.gzip (5кб), распаковав который архиватором получается файл без расширения (11кб), который содержит в себе нужную страницу. Несмотря на это запись файла в 5кб происходит подозрительно небыстро (может, около 5 сек +-): почти мгновенно появляется файл в 4кб и уже под конец еще кб добавляется и консолька завершает свою работу.
MinGW, Win7 Sp1 Pro, CodeLite IDE 3.0.5045, wxWidgets 2.9.2 (unicode=on)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Iron Bug
  опции профиля:
сообщение 12.9.2011, 20:18
Сообщение #2


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


тут возможны тонкости с кодировкой. почему бы не использовать wxChar вместо wxByte? он, по крайней мере, не будет зависеть от настроек компиляции проекта.
я вот даже навскидку не могу сказать, к чему он приведёт wxByte в конструкторе wxString и как он будет вычислять длину, которая в этом конструкторе не указана явно. а неявно там применяются методы преобразования строк, расписанные в документации на wxString и соответственно, разные методы вычисления длины строки. скорее всего, его заглючивает в этом месте и он не может преобразовать строки.
я думаю, всё это отлично можно поглядеть в дебаге или хотя бы проверить длину полученной строки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 10:07