IdHTTP, SSL, Basic-авторизация
, Непонятка с авторизацией
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.223] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
IdHTTP, SSL, Basic-авторизация
, Непонятка с авторизацией
|
Сообщ.
#1
,
|
|
|
|
Доброго времени суток!
Вопрос возник относительно BASIC-авторизации через IdHTTP. Точнее, мне хочется понять почему при первом запросе я получаю ответ от сервера 401 (не авторизован), а при повторных - все нормально (200 OK) и доступ к закрытой информации полный. ![]() ![]() const host = '172.22.0.1'; UserAgent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0'; Accept = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; AcceptLanguage = 'ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3'; AcceptEncoding = 'gzip, deflate'; Connection = 'keep-alive'; Referer = 'http://172.22.0.1/'; function GetAuthCode(s: string): string; var enc: TIdEncoderMIME; begin enc := TIdEncoderMIME.Create(nil); Result := enc.EncodeString(s); enc.Free; end; procedure SetParamsHttp(login, password: string; var http: TIdHTTP); begin http.HandleRedirects := true; http.AllowCookies := true; http.Request.Accept := Accept; http.Request.AcceptEncoding := AcceptEncoding; http.Request.AcceptLanguage := AcceptLanguage; http.Request.BasicAuthentication := True; http.Request.Connection := Connection; http.Request.Host := host; http.Request.Username := Login; http.Request.Password := Password; if (CurrentReferer <> '') and (CurrentReferer <> Referer) then http.Request.Referer := CurrentReferer else http.Request.Referer := Referer; HTTP.Request.CustomHeaders.clear; HTTP.Request.CustomHeaders.Add('Authorization: Basic '+GetAuthCode(HTTP.Request.Username+':'+HTTP.Request.Password)); end; procedure TForm1.IdHTPAuthorization(Sender: TObject; Authentication: TIdAuthentication; var Handled: Boolean); begin Handled := True; Authentication.Username := edLogin.Text; Authentication.Password := edPassword.Text; end; procedure TForm1.Button1Click(Sender: TObject); var idHp: TIdHTTP; idIOSSL: TIdSSLIOHandlerSocketOpenSSL; idCM: TIdCookieManager; begin idHp := TIdHTTP.Create(nil); idIOSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil); idCM := TIdCookieManager.Create(nil); idHp.CookieManager := idCM; idHp.IOHandler := idIOSSL; idhp.OnAuthorization := IdHTPAuthorization; try SetParamsHttp(edLogin.Text, edPassword.Text, idhp); ShowMessage(idHp.Get('https://172.22.0.1/cgi-bin/um2/ac')); finally idCM.Free; idIOSSL.Free; idHp.Free; end; end; |