Форум: "Сети";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
ВнизКак скачать файл, используя прокси с авторизацией? Найти похожие ветки
← →
kay © (2005-09-26 18:51) [0]Сейчас пользуюсь такой функцией, но она не позволяет использовать прокси с авторизацией.
function Ttraffic_counter.GetInetFile(const fileURL, FileName: string): boolean;
const
BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
f: file;
sAppName: string;
begin
Result := False;
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName),
INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
try
AssignFile(f, FileName);
Rewrite(f,1);
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(f, Buffer, BufferLen);
until
BufferLen = 0;
CloseFile(f);
Result := True;
finally
InternetCloseHandle(hURL);
end;
finally
InternetCloseHandle(hSession);
end;
end;
← →
Seeker © (2005-09-27 12:34) [1]
> но она не позволяет использовать прокси с авторизацией.
А что мешает ее переделать?procedure DownloadFile(Server,RemoteFile,LocalFile,Proxy, Login,Password: String;ProgressProcedure : Pointer);
const BufferSize = 1024;
Var OpenHandle, ConnectHandle, Resourcehandle : HInternet;
dwStatus : DWord;
dwStatusSize : Cardinal;
cnil : Cardinal;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
F: File of Byte;
PP : procedure(Percent : Integer);
r,a: Integer;
InTag : Boolean;
begin
@PP:=ProgressProcedure;
dwStatusSize:=Sizeof(dwStatus);
if (Proxy="") then OpenHandle:=InternetOpen("IReader",INTERNET_OPEN_TYPE_PRECONFIG, nil,nil,0)
else OpenHandle:=InternetOpen("IReader",INTERNET_OPEN_TYPE_PROXY, PChar(Proxy),nil,1);
ConnectHandle:=InternetConnect(OpenHandle, PAnsiChar(Server), INTERNET_INVALID_PORT_NUMBER, nil, nil, INTERNET_SERVICE_HTTP,0,0);
ResourceHandle:=HTTPOpenRequest(Connecthandle, "GET",PAnsiChar(RemoteFile),nil,nil,nil,INTERNET_FLAG_KEEP_CONNECTION, 0);
InternetSetOption(ResourceHandle, INTERNET_OPTION_PROXY_USERNAME, PAnsiChar(Login), Length(Login)+1);
InternetSetOption(ResourceHandle, INTERNET_OPTION_PROXY_PASSWORD, PAnsiChar(Password), Length(Password)+1);
HttpSendRequest(ResourceHandle, nil, 0, nil, 0);
cnil:=0;
HttpQueryInfo(ResourceHandle, HTTP_QUERY_FLAG_NUMBER or HTTP_QUERY_STATUS_CODE, @dwStatus, dwStatusSize, cnil);
if (dwStatus = HTTP_STATUS_NOT_FOUND) then
begin
InternetCloseHandle(ResourceHandle);
InternetCloseHandle(ConnectHandle);
InternetCloseHandle(OpenHandle);
raise Exception.Create("Файл не найден "+RemoteFile);
end;
if (dwStatus = HTTP_STATUS_PROXY_AUTH_REQ) then
begin
InternetCloseHandle(ResourceHandle);
InternetCloseHandle(ConnectHandle);
InternetCloseHandle(OpenHandle);
raise Exception.Create("Неверный пользователь Proxy");
end;
AssignFile(F,LocalFile);
Rewrite(F);
r:=0;
InTag:=false;
repeat
InternetReadFile(ResourceHandle, @Buffer, SizeOf(Buffer), BufferLen);
BlockWrite(f, Buffer, BufferLen);
if (@PP<>nil) then PP(round(r*BufferSize/1024));
inc(r);
until BufferLen = 0;
CloseFile(F);
if (@PP<>nil) then PP(-1);
InternetCloseHandle(ResourceHandle);
InternetCloseHandle(ConnectHandle);
InternetCloseHandle(OpenHandle);
end;
← →
kay © (2005-09-27 16:47) [2]спасибо. А то я ещё начал мучить idHTTP от Indy, но на него в документации ничего не написано. А примеры только на idHTTPServer.
P.S. Раньше с сетью ни разу не работал.
← →
kay © (2005-09-27 16:47) [3]спасибо. А то я ещё начал мучить idHTTP от Indy, но на него в документации ничего не написано. А примеры только на idHTTPServer.
P.S. Раньше с сетью ни разу не работал.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.01.15;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.013 c