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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема со скачкой файла через WinInet 
V
    Опции темы
12usver12
Дата 1.10.2008, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

 bool bResult = false;
    HINTERNET hInternet = InternetOpen(
        TEXT("WinInet Test"),
        INTERNET_OPEN_TYPE_PRECONFIG,
        NULL,NULL,
        0);
    
    if (hInternet != NULL)
    {
        HINTERNET hConnect = InternetConnect(
            hInternet,
            TEXT("img.yandex.net"),
            INTERNET_DEFAULT_HTTP_PORT,
            NULL,NULL,
            INTERNET_SERVICE_HTTP,
            0,
            1u);
        
char head[1024];
        strcpy(head,"GET / HTTP/1.1\r\n");
        strcat(head,"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.4) Gecko/20070515 Firefox/2.0.0.4\r\n");
    strcat(head,"Referer: http://www.ya.ru/\r\n");

        if( hConnect )
        {
            HINTERNET hRequest = HttpOpenRequest(
                hConnect,
                TEXT("GET"),
                TEXT("/i/logo100x43.gif"),
                NULL,
                NULL,
                0,
                INTERNET_FLAG_KEEP_CONNECTION,
                1);
            HttpAddRequestHeaders(hRequest,head, strlen(head),0);
            if( hRequest )
            {
                BOOL bSend = HttpSendRequest(hRequest, NULL,0, NULL,0);
                if( bSend )
                {
                    std::ofstream file("C:\\index.gif",ios::out|ios::binary);
                    if (file.is_open())
                    {const int BUFF_SIZE = 100;
                        char  szData[BUFF_SIZE];
                        for (;;)
                        {
                            DWORD dwBytesRead;
                            BOOL bRead = InternetReadFile(
                                hRequest,
                                szData,sizeof(szData)-1,
                                &dwBytesRead);
                            if( bRead == FALSE || dwBytesRead == 0 )
                                break;
                            szData[dwBytesRead] = 0;
                            file<<szData;
                            bResult = true;
                        }
                    }
                }
                InternetCloseHandle(hRequest);
            }
            InternetCloseHandle(hConnect);
        }
        InternetCloseHandle(hInternet);
    }






вот есть такой кусок стандартного кода для скачки файла с инета, много раз его встречал в инете,пробовал хтмл странички вроде скачивает, но вот когда хочу скачать gif-файл, не выходит - точнее скачивает не все байты и всегда их не хватает до реального количества, скачивает часть но весь файл в зависимости от  const int BUFF_SIZE чем он меньше тем больше файла скачивается до реального кол-ва байт инет-файла...в чем может быть причина ?
может быть здесь ?
Код

{const int BUFF_SIZE = 100;
                        char  szData[BUFF_SIZE];
                        for (;;)
                        {
                            DWORD dwBytesRead;
                            BOOL bRead = InternetReadFile(
                                hRequest,
                                szData,sizeof(szData)-1,
                                &dwBytesRead);
                            if( bRead == FALSE || dwBytesRead == 0 )
                                break;
                            szData[dwBytesRead] = 0;
                            file<<szData;
                            bResult = true;
                        }

PM MAIL   Вверх
lemax
Дата 2.10.2008, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



PM MAIL   Вверх
12usver12
Дата 3.10.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



серавно не могу покамись решить проблему , вообще мне нужно код скачки файла с возможностью манипулирования,отсылки http headers если у кого-то есть код подобный на сокетах или другая реализация то выкладывайте в студию  smile 
PM MAIL   Вверх
ptr
Дата 7.10.2008, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



InternetReadFile скорее всего считывает всё правильно. А вот запись буфера в файл не правильная. Файл на то и бинарный, что в нем может быть всё что угодно, например, '\0' посередине. Используй вместо operator <<, метод write:
Код

DWORD dwBytesRead;
                            BOOL bRead = InternetReadFile(
                                hRequest,
                                szData,sizeof(szData)-1,
                                &dwBytesRead);
                            if( bRead == FALSE || dwBytesRead == 0 )
                                break;
                            file.write(szData, dwBytesRead);
                            bResult = true;



--------------------
Единственный способ определить границы возможного - это выйти за эти границы, в невозможное.
Артур Кларк.
PM MAIL ICQ   Вверх
12usver12
Дата 7.10.2008, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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


 




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


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

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