我正在使用 Indy TIdHTTP 获取带有 BasicAuthentication 的请求。
代码工作正常,但 TIdHTTP 在第一个 401 之后不会清除 BasicAuthentication 凭据,如果用户使用正确的登录密码重新输入凭据并再次发送请求。用户必须登录两次才能授权。
用户操作顺序:
步骤 1. 用户输入错误的登录密码:ResponseCode = 401
步骤 2. 用户类型正确的登录密码:ResponseCode = 401
步骤 3. 用户类型正确的登录密码:ResponseCode = 200
我认为第 2 步的结果是一个错误。我应该怎么办?
简单代码:
var
IdHTTP1: TIdHTTP;
fLogin : string;
fPassword : string;
/// ...
if ( fLogin <> '' ) and ( fPassword <> '' )
then
begin
if ( IdHTTP1.Request.Username <> fLogin )
or
( IdHTTP1.Request.Password <> fPassword )
then
begin
IdHTTP1.Request.BasicAuthentication := True;
IdHTTP1.Request.Username := fLogin;
IdHTTP1.Request.Password := fPassword;
end;
s := IdHTTP1.Get( 'some_url' );
response_code := Idhttp1.response.ResponseCode;
case response_code of
200:
begin
// parse request data
end;
401 : Result := nc_res_Auth_Fail;
else Result := nc_res_Fail;
end;
end;