Форум: "Сети";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
ВнизПолучение размера удалённого файла без его скачивания. Найти похожие ветки
← →
Maks Realov (2003-08-06 14:15) [0]Как программно получить размер файла, который лежит на www.somesite.com/dir, т.е. www.somesite.com/dir/file1.zip ?
Естественно, без предварительного скачивания данного файла.
Спасибо.
← →
Е-Моё имя (2003-08-06 14:36) [1]метод http HEAD
получает заголовки, там есть длина ресурса, если ее можно вычислить
← →
Anatoly Podgoretsky (2003-08-06 14:40) [2]А может у него ftp протокол или расшаренная папка.
← →
Maks Realov (2003-08-06 14:45) [3]Вообще говоря, я пользуюсь функцией URLDownloadToFile для скачивания файлов. Так что качаю через http протокол. Это так - к сведению.
← →
xShadow (2003-08-06 15:29) [4]
Function GetUrlInfo( const FileURL: String ): Integer;
var hSession, hFile: hInternet;
dwBuffer: PChar;
dwBufferLen, dwIndex: DWORD;
TempS: String;
Begin
Result := 0;
hSession := InternetOpen( "xShadow downlaod inf", INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned( hSession ) then
Begin
hFile := InternetOpenURL( hSession, PChar(FileURL), nil, 0, INTERNET_FLAG_RELOAD, 0);
dwIndex := 0;
dwBufferLen := 20;
if HttpQueryInfo( hFile, HTTP_QUERY_CONTENT_LENGTH, dwBuffer, dwBufferLen, dwIndex) then
Begin
TempS := StrPas( dwBuffer );
Result := StrToInt( TempS );
end;
if Assigned( hFile ) then InternetCloseHandle(hFile);
( hsession)
Function GetUrlInfo( const FileURL: String ): Integer;
var hSession, hFile: hInternet;
dwBuffer: PChar;
dwBufferLen, dwIndex: DWORD;
TempS: String;
Begin
Result := 0;
hSession := InternetOpen( "xShadow downlaod inf", INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned( hSession ) then
Begin
hFile := InternetOpenURL( hSession, PChar(FileURL), nil, 0, INTERNET_FLAG_RELOAD, 0);
dwIndex := 0;
dwBufferLen := 20;
if HttpQueryInfo( hFile, HTTP_QUERY_CONTENT_LENGTH, dwBuffer, dwBufferLen, dwIndex) then
Begin
TempS := StrPas( dwBuffer );
Result := StrToInt( TempS );
end;
if Assigned( hFile ) then InternetCloseHandle(hFile);
InternetCloseHandle(hsession);
end;
end;
Вот кусок должен работать его предназначение вернуть размер http ссылки или файла. Проверялось только на файлах
← →
Е-Моё имя (2003-08-06 16:04) [5]Anatoly Podgoretsky © (06.08.03 14:40)
о типе сервера судил по приведенному примеру адреса
типичный http адрес )
← →
Maks Realov (2003-08-06 16:30) [6]xShadow:
HttpQueryInfo всегда возвращает False, а GetLastError даёт значение 12150.
← →
xShadow (2003-08-06 16:32) [7]Maks Realov
Это про код который я привёл ?
А остальные параметры какие??
Есть ли прокси сервер? Постоянно ли ты подключен к инету ?
← →
Maks Realov (2003-08-06 16:33) [8]В WinError.h:
#define ERROR_INVALID_SHARENAME 1215L
Я задаю URL так: http://mysrv.serv.ru/myfile.zip
← →
xShadow (2003-08-06 16:34) [9]Maks Realov
Это про код который я привёл ?
А остальные параметры какие??
Есть ли прокси сервер? Постоянно ли ты подключен к инету ?
← →
xShadow (2003-08-06 16:34) [10]Пардон глюки :(
Проксю есть?
← →
Anatoly Podgoretsky (2003-08-06 16:44) [11]Е-Моё имя © (06.08.03 16:04)
Часто встречаю расшаренные папки идаже с полным доступом, так что по приведенному адресу судить нельзя, вот если бы было написано с указанием протокола http://www.somesite.com/dir/file1.zip то тогда бы вопроса не возникло.
← →
Maks Realov (2003-08-06 16:46) [12]Да, про этот код.
А какие остальные параметры?
Прокся есть, но она для меня прозрачна, т.е. я напрямую обращаюсь к 80-му порту. В IE никаких спец. настроек нет.
← →
Aleksey Pavlov (2003-08-06 16:52) [13]>>Maks Realov:
Бага тривиальная память невыделена у тебя:
function GetUrlInfo(const FileURL: String): Integer;
var
hSession, hFile: hInternet;
dwBuffer: PChar;
dwBufferLen, dwIndex: DWORD;
TempS: String;
begin
Result:= 0;
dwBuffer:= StrAlloc(255*SizeOf(Char));
hSession:= InternetOpen("WebClient", INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
if Assigned(hSession) then
begin
hFile:= InternetOpenURL(hSession, PChar(FileURL), nil, 0, INTERNET_FLAG_RELOAD, 0);
dwIndex:= 0;
dwBufferLen:= 20;
if HttpQueryInfo(hFile, HTTP_QUERY_CONTENT_LENGTH, dwBuffer, dwBufferLen, dwIndex) then
begin
TempS:= StrPas(dwBuffer);
Result:= StrToInt(TempS);
end;
ShowMessage(IntToStr(GetLastError));
if Assigned(hFile) then
InternetCloseHandle(hFile);
InternetCloseHandle(hsession);
end;
StrDispose(dwBuffer);
end;
← →
Anatoly Podgoretsky (2003-08-06 16:58) [14]xShadow © (06.08.03 16:32)
Остальное не важно, требуется обращение к серверу с коандой HEAD, что и делается через WinInet.dll функцией HttpQueryInfo, это уже с разбором заголовка.
Единственная проблема, что нет гарантиии получения размера или этот размер может быть неверным.
← →
Е-Моё имя (2003-08-06 17:14) [15]Anatoly Podgoretsky © (06.08.03 16:44)
гыыы))
бывает же такое)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.10.02;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.009 c