Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прочитать интернет-страницу 
:(
    Опции темы
Anton Vatchenko
  Дата 3.6.2004, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



У меня есть WinInet-проект на С++, который открывает интернет страницу. Как запихнуть ее содержимое в какой-нибудь буфер? ведь размер страницы неизвестен! Мы можем только читать определенное кол-во символов, а сервер вернет сколько может!


--------------------
user posted image
PM MAIL   Вверх
mr.DUDA
Дата 3.6.2004, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Размер страницы неизвестен, зато можно прочитать сколько получится smile.gif и обрабатывать результат.


--------------------
user posted image
PM MAIL WWW   Вверх
Anton Vatchenko
Дата 3.6.2004, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Каким образом? Допустим у меня есть файл, который где-то лежит. Я могу использовать только функцию чтения, в которой нужно указывать размер сколько считать. Как быть? Как по частям это считать и как поместить в буфер? Сделать несколько буферов? Сделать список буферов?


--------------------
user posted image
PM MAIL   Вверх
_hunter
Дата 3.6.2004, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



читать порциями определенного размера и их записывать в динамический массив ( ожно и список )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Anton Vatchenko
Дата 3.6.2004, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



я это знаю. Как лучше это сделать? Просто мне интересно мнение специалистов. Например, как это делает Эксплорер?


--------------------
user posted image
PM MAIL   Вверх
mr.DUDA
Дата 3.6.2004, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Цитата
Как лучше это сделать?

Простой и эффективный метод - это использование контейнера deque (добавление элементов происходит "пачками", а не по одному, как в list, и не с перераспределением как в vector или в дин. массиве; доступ к элементу по индексу ненамного медленнее, чем в дин. массиве):
Цитата
#include <deque>
using namespace std;

void read_inet_page()
{
   
deque<unsigned char> arr;
   
   
while(true)
    {
       
unsigned char ch;
       
       
// ...
        // получение байта
        // ...
       
       
arr.push_back(ch);
    }

   
// после получения последнего байта можно
    // работать с декой как с обычным массивом
   
for(int i=0; i<arr.size(); i++)
       
printf("%d", arr[i]);
}



--------------------
user posted image
PM MAIL WWW   Вверх
dwr_budr
Дата 4.6.2004, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 11.4.2004

Репутация: нет
Всего: 2



Эксплорер в http заголовке читает размер документа smile.gif
PM MAIL   Вверх
mr.DUDA
Дата 4.6.2004, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



dwr_budr, трабл в том что ответ может не целиком дойти smile.gif


--------------------
user posted image
PM MAIL WWW   Вверх
FreshMeat
Дата 4.6.2004, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 30.1.2004

Репутация: нет
Всего: нет



PM MAIL   Вверх
dwr_budr
Дата 5.6.2004, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 11.4.2004

Репутация: нет
Всего: 2



mr. DUDA

Какой ответ? Хттп заголовок? Тек если его не получит клиент, то речи о контенте и быть не может вообще. Так что не вижу повода для беспокойства smile.gif

Ежели сам контент придет не в полном объеме, то это уже дело клиента как поступить. Или ругнется, или отрендерит (просто сохранит) то что получил. От того что буффер динамический контента больше не придет smile.gif

Это сообщение отредактировал(а) dwr_budr - 5.6.2004, 08:30
PM MAIL   Вверх
Anton Vatchenko
Дата 9.6.2004, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 21.5.2004

Репутация: нет
Всего: -1



Как в WinInet получить размер страницы, которую читаешь?


--------------------
user posted image
PM MAIL   Вверх
AndyY
Дата 9.6.2004, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 8.5.2004
Где: СПб

Репутация: 2
Всего: 4



dwr_budr
Заголовок-то придет, но поле длины контента сплошь и рядом будет врать. Ибо в инете дофига всякого.

Anton Vatchenko
Не прочитав до конца - никак. Ориентироваться конечно можно на что-то.
Но в чем проблема-то? выделяй список блоков кило по 10 да и делов-то. IMHO это не то, что надо оптимизировать (если конечно ты не браузер для часов пишешьsmile.gif)


--------------------
PM MAIL WWW   Вверх
dwr_budr
Дата 9.6.2004, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 11.4.2004

Репутация: нет
Всего: 2



AndyY

А можно поподробнее о вранье в поле размера контента. Мне просто интересно каким образом веб сервер его неправильно сгенерит.
PM MAIL   Вверх
AndyY
Дата 9.6.2004, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 8.5.2004
Где: СПб

Репутация: 2
Всего: 4



Обратимся к RFC 2616, посвященному протоколу HTTP1.1

По большому счету возможность некорректной передачи content-length заложена в нем. Например, ситуация с transfer-encoding (пункт 4.4):

If a message is received with both aTransfer-Encoding header field and a Content-Length header field, the latter MUST be ignored.

Кроме того в стандарте явно прописаны случаи, когда content-length посылать нельзя. Гарантировать, что так и есть в реальной жизни - не возможно, потому что серверов до дьявола.

может завтра посмотрю конкретные примеры, если будет время.


--------------------
PM MAIL WWW   Вверх
dwr_budr
Дата 10.6.2004, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 100
Регистрация: 11.4.2004

Репутация: нет
Всего: 2



AndyY

Ах вот где собака зарыта!
Тогда без вопросов!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1190 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.