Я пытаюсь получить фотографии пользователей в Exchange, используя IdHTTP
до REST API
Как получить фотографии пользователей с помощью EWS в Обмен
procedure TsMain.IdHTTP1Authorization(Sender: TObject;
Authentication: TIdAuthentication; var Handled: Boolean);
begin
Authentication.Username := DomainName +'\'+ User;
Authentication.Username := User + #64 + DomainName;
Authentication.Password := Password;
Handled:=true;
end;
function TsMain.GetUserPhoto(const eMail: string):Boolean;
var
s: TStream;
ResponseCode: Integer;
begin
Result := False;
idHTTP:= TIdHttp.Create(Application);
s := TFileStream.Create('mypic.jpg', fmCreate);
try
idHTTP.OnAuthorization := IdHTTP1Authorization;
idHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(idHTTP);
idHTTP.HandleRedirects := True;
idHTTP.Request.BasicAuthentication:= true;
idHTTP.Get('https://ServerName/ews/Exchange.asmx/s/GetUserPhoto?email='+eMail+'&size=HR240x240', s);
ResponseCode := idHTTP.Response.ResponseCode;
case ResponseCode of
200:
begin
Result := True;
end;
else
ShowMessage(idHTTP.Response.ResponseText);
end;
finally
s.Free;
idHTTP.Free;
end;
end;
Я получаю HTTP/1.1 401 Anonymous Request Disallowed
.
Почему idHTTP
не отправляет аутентификацию с запросом? Что я делаю неправильно?
TIdHTTP.Request.Username
иTIdHTTP.Request.Password
до вызоваTIdHTTP.Get()
, если они у вас уже есть. Если сервер отклоняет учетные данные, запускается событиеTIdHTTP.OnAuthorization
, чтобы вы могли предоставить новые учетные данные (например, запросив пользователя), а затем соответствующим образом установитьHandled
(true = повторить попытку, false = остановить). - person Remy Lebeau   schedule 19.05.2016TIdHTTP.OnSelectAuthorization
, которое сообщает вам, какие схемы аутентификации на самом деле разрешены сервером. Он может даже не разрешать аутентификациюBASIC
для начала, и в этом случаеTIdHTTP.Request.BasicAuthentication
бесполезен, вам придется добавить соответствующие единицыIdAuthentication...
в предложениеuses
(IdAuthenticationNTLM
и т. д.), чтобыTIdHTTP.Request.Authentication
можно было заполнить правильным типом класса (если вы не не назначайте его вручную). - person Remy Lebeau   schedule 19.05.2016TIdNTLMAuthentication
свойствуAuthenticationClass
в событииTIdHTTP.OnSelectAuthorization
. И присвоилFalse
свойствуTIdHTTP.Request.BasicAuthentication
. Затем, как вы также указали относительно начальных учетных данных пользователя перед вызовомTIdHTTP.Get()
, вы можете добавить его в качестве ответа, потому что это действительно помогло мне. я ценю вашу помощь. - person RepeatUntil   schedule 20.05.2016