Se lato server puoi mettere un tuo eseguibile puoi usare il componete IdHTTPServer che supporta autenticazione quant'altro.
Mi pare di capire però che lato server hai apache + php e quindi devi arrangiarti con quello. Se vuoi lato client puoi usare una cosa del genere:

codice:
function PostHTTP(Server, funzione, UserID, Password: String; Socket: Integer; TestoXmlOut, TestoXmlIn: TStream; LogProcedure: TLogProcedure): boolean;
var
  IdHTTP: TIdHTTP;
begin
  funzione:= 'http://'+ Server+ ':'+ IntToStr(Socket)+ '/'+ funzione;
  PostHTTP:= false;
  IdHTTP:= TIdHTTP.Create(nil);
  try
    try
      IdHTTP.AllowCookies:= True;
      IdHTTP.ProtocolVersion:= pv1_0;
      IdHTTP.ProxyParams.BasicAuthentication:= False;
      IdHTTP.ProxyParams.ProxyPort:= 0;
      IdHTTP.Request.ContentLength:= -1;
      IdHTTP.Request.Accept:= 'text/html, */*';
      IdHTTP.Request.BasicAuthentication:= False;
      IdHTTP.Request.UserAgent:= 'Mozilla/3.0 (compatible; Indy Library)';
      IdHTTP.Request.BasicAuthentication:= true;
      IdHTTP.Request.Username:= UserID;
      IdHTTP.Request.Password:= Password;
      IdHTTP.HTTPOptions:= [hoKeepOrigProtocol,hoForceEncodeParams];
      IdHTTP.Post(funzione, TestoXmlOut, TestoXmlIn);
      if IdHTTP.ResponseCode= 200 then PostHTTP:= true else if Assigned(LogProcedure) then LogProcedure(' Errore di autenticazione! ResponseCode: '+ IntToStr(IdHTTP.ResponseCode));
      except on e: Exception do begin
        if Assigned(LogProcedure) then LogProcedure('ThTrasferisciTimbrature.PostHTTP() '+ e.Message);
      end;
    end;
  finally
    IdHTTP.Free();
  end;
end;
che è una funzioncina che uso io. Accetta uno stream da spedire e scrive in un altro stream ciò che torna.
Ora, non vorrei dire una cazzata, di solito http non si usa per caricare file di grosse dimensioni, ad esempio quando carico qualcosa nel mio sito presso Aruba mi obbligano ad usare ftp per i file di grosse dimensioni.
Non vorrei infatti che il server http si tenga l'intero file in ram fintantoché non lo ha ricevuto tutto (e quindi se hai un file grosso...) mentre l'ftp lo scrive subito nel disco...


Ma non è che hanno configurato male in server ftp?