Hallo nahpets,
ich hatte gerade noch etwas den Quelltext überarbeitet:
Server:
Delphi-Quellcode:
procedure TWebModule1.WebModule1TestAction(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
N: Integer;
S: String;
begin
S := String(Request.Authorization);
N := Pos(' ',S);
if N > 0 then
begin
Delete(S,1,N);
S := TIdDecoderMIME.DecodeString(s);
N := Pos(':',S);
if N > 0 then
begin
Response.Content:=Format('Username: %s<br>Password: %s',[Copy(S,1,N-1),Copy(S,N+1,Length(S)-N+1)]);
Exit;
end;
end;
Response.WWWAuthenticate := 'Basic';
Response.StatusCode := 401;
end;
Klient:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
HTTP: TIdHTTP;
begin
HTTP := TIdHTTP.Create;
try
HTTP.Request.BasicAuthentication := True;
HTTP.HandleRedirects := True;
HTTP.Request.Username := Edit1.Text;
HTTP.Request.Password := Edit2.Text;
Memo1.Lines.Text := StringReplace(HTTP.Get('http://maps4delphi.com/test'),'<br>',sLineBreak,[rfReplaceAll]);
finally
HTTP.Free;
end;
end;
Damit reagiert der Server auch auf Browseranfragen (getestet mit IE9, IE10, Firefox und Google Chrome). Hier erscheint dann wegen des Statuscodes 401 der Eingabedialog für Name und Passwort.
Da ich den Zeilenumbruch in ein "<br>"-Tag umgewandelt habe, wird die Serverantwort auch korrekt im Browser angezeigt. Für die Anzeige im Delphi-Programm wird der Zeilenumbruch durch
StringReplace umgewandelt.
Die Übergabe per "Name:Passwort@xyz" funktioniert nicht.
Unter Delphi 7 könnte es eventuell noch Probleme mit der Eigenschaft
Request.Authorization geben. Das kann ich momentan leider nicht testen. Du könntest aber mal versuchen, diesen Wert direkt abzufragen:
Request.GetFieldByName('Authorization');
P.S.:
Das Ganze funktioniert natürlich auch über HTTPS (wegen Basic-Authentifikation = unsicher):
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
HTTP: TIdHTTP;
SSL: TIdSSLIOHandlerSocketOpenSSL;
begin
HTTP := TIdHTTP.Create;
try
SSL := TIdSSLIOHandlerSocketOpenSSL.Create;
try
HTTP.IOHandler := SSL;
HTTP.Request.BasicAuthentication := True;
HTTP.HandleRedirects := True;
HTTP.Request.Username := Edit1.Text;
HTTP.Request.Password := Edit2.Text;
Memo1.Lines.Text := StringReplace(HTTP.Get('https://maps4delphi.com/test'),'<br>',sLineBreak,[rfReplaceAll]);
finally
SSL.Free;
end;
finally
HTTP.Free;
end;
end;