Доброго времени суток. # Задача: Необходимо разобраться по заголовкам .zip архив на хостинге и скачать определённый сжатый файл используя WinSock. - С разбором .zip файла я закончил. - С декодированием данных при помощи алгоритма Deflate разобрался. # Как узнать размер файла на удалённом хостинге по пути:| Код | #include <Wininet.h> #pragma comment(lib, "Wininet.lib") ... DWORD GetFileSizeByURL(PCHAR szURLFilePath) { DWORD result = 0; // ---- HINTERNET hSession = InternetOpen("My Temp Browser", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); // ---- if ( hSession == NULL ) return result; // ---- HINTERNET hUrl = InternetOpenUrl(hSession, szURLFilePath, "", 0, 0, 0); // ---- if ( hUrl == NULL ) { InternetCloseHandle(hSession); return result; } // ---- DWORD dwFileSize = 0; DWORD cb = sizeof(DWORD); DWORD index = 0; // ---- int iRes = HttpQueryInfo(hUrl, HTTP_QUERY_FLAG_NUMBER | HTTP_QUERY_CONTENT_LENGTH, & dwFileSize, & cb, & index); if ( iRes == 0 ) { DWORD dwError = GetLastError(); } else { result = dwFileSize; } // ---- InternetCloseHandle(hUrl); InternetCloseHandle(hSession); // ---- return result; }
|
# Как скачать определённую часть архива/файла:| Цитата | 1. Как скачать определённую часть архива/файла? - То есть, файл допустим 100 байт, мне нужно скачать 37 байтов, но начиная с 61 позиции. - Предыдущее содержимое качать не нужно.
Вот стандартный вариант загрузки всего файла. sprintf(buff,"GET %s\r\n\r\n",filepath); send(conn,buff,strlen(buff),0); while( (iLen = recv(conn, buff, 512, 0)) > 0 ) { }
P.S. -> А как можно указать, что мне необходимо начать скачивание со смещением? - Для файлов аналоги: fseek(), SetFilePointer().
|
P.S. -> Надеюсь на какие-то подсказки, советы, пенки, ссылки и т.д. # Добавлено:| Цитата | Воспользовался услугами Reget Deluxe и снифером =) - На закачку файла из архива выбрал файл: http://zlib.net/zlib125.zip
| Код | GET /zlib125.zip HTTP/1.0 User-Agent: Mozilla/4.0 (compatible; <a href=http://www.reget.com>ReGet Deluxe 5.1</a>; Windows NT 5.1) Accept: */* Range: bytes=351178- Referer: http://zlib.net/ Host: zlib.net
|
Вот что отправляет ReGet Deluxe на хост, чтобы скачать файл со смещением.
Если я правильно понял, тогда нужно отправлять следующий запрос:
| Код | sprintf(buf, "Get %s\r\nRange: bytes=%d-\r\n\r\n", URLFilePath, dwSeek); send(conn, buf, strlen(buf), 0); while( (iLen = recv(conn, InBuf, iLen, 0)) > 0 ) { }
|
|
Это сообщение отредактировал(а) MuForum - 16.5.2011, 20:08
--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа!" (Р. Шекли)
|