TIdHTTP: скачка файла из-за файервола?
От: Firstborn Латвия  
Дата: 21.04.05 10:24
Оценка:
Хочется наконец внести полную и окончательную ясность в этот вопрос... Как с помощью TIdHTTP скачать файл из-за файервола или прокси сервера, требующего авторизации? Казалось бы всё просто, однако не получается. В связи с чем была написана коротенькая утилитка для тестирования, которая только и умеет, что скачивать заданный файл с заданными параметрами прокси.

Т.е. для скачки напрямую, надо делать так:
C:\FileDownload.exe http://tut.url.com/file.ext

А для скачки через прокси/файервол — так:
C:\FileDownload.exe http://tut.url.com/file.ext proxy port username password

Вот, собственно, код:

program FileDownload;
{$APPTYPE CONSOLE}

uses
  SysUtils, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, Classes;

var HTTP: TIdHTTP;
    FStream: TFileStream;
begin
     // allocate resources
     HTTP:=TIdHTTP.Create(Nil);
     FStream:=TFileStream.Create('downloaded.dat', fmCreate);

     // get params
     if ParamCount=5 then
       with HTTP.ProxyParams do begin
                                ProxyServer:=ParamStr(2);
                                ProxyPort:=StrToInt(ParamStr(3));
                                ProxyUsername:=ParamStr(4);
                                ProxyPassword:=ParamStr(5);
                                end; //with

     // try downloading the specified file
     try
        HTTP.Get(ParamStr(1), FStream);
     except
         on E: Exception do WriteLn(E.Message);
     end; //try..except

     // clean-up
     FStream.Free;
     HTTP.Free;
end.

Скчать его можно здесь, в скомпиллированном виде — здесь.

С помощью этого чудо-софта было констатировано вот что: скачка без прокси и файерволов происходит на ура, однако при попытке слить файл из-за файервола, получаем такой вот аутпут:

HTTP/1.0 407 Proxy Authentication Required


Внимание, вопрос: теперь-то что? Куда ещё ему этот username/password запихать? Насколько я понял из RFC по HTTP, запрос нужно повторить, да только это почему-то не помогает... Что же я недопонял? Что именно нужно вставить в этот код, чтобы всё работало?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.