Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.15;
Скачать: CL | DM;

Вниз

Как скачать файл, используя прокси с авторизацией?   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.057 c
2-1135659572
DimonS
2005-12-27 07:59
2006.01.15
Подскажите по SQL


3-1132404671
redlord
2005-11-19 15:51
2006.01.15
оказ в обслуживании MSSQL server


6-1127974262
Гарри Поттер
2005-09-29 10:11
2006.01.15
Организация программ.


2-1135256872
Dysan
2005-12-22 16:07
2006.01.15
помогите разобраться!


3-1132307475
4ik
2005-11-18 12:51
2006.01.15
Можно в DBGrid назначить одной ячейке формулу?