<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=406244&amp;view=findpost&amp;p=3627848</guid>
        <pubDate>Fri, 02 Oct 2015 17:32:35 +0000</pubDate>
        <title>IdHTTP, SSL, Basic-авторизация</title>
        <link>https://forum.sources.ru/index.php?showtopic=406244&amp;view=findpost&amp;p=3627848</link>
        <description><![CDATA[=SAPSAN=: Доброго времени суток&#33;<br>
<br>
Вопрос возник относительно BASIC-авторизации через IdHTTP. Точнее, мне хочется понять почему при <strong class='tag-b'>первом</strong> запросе я получаю ответ от сервера 401 (не авторизован), а при повторных - все нормально (200 OK) и доступ к закрытой информации полный.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">const</div><div class="code_line">&nbsp;&nbsp;host = &#39;172.22.0.1&#39;;</div><div class="code_line">&nbsp;&nbsp;UserAgent = &#39;Mozilla/5.0 (Windows NT 6.3; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0&#39;;</div><div class="code_line">&nbsp;&nbsp;Accept = &#39;text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&#39;;</div><div class="code_line">&nbsp;&nbsp;AcceptLanguage = &#39;ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3&#39;;</div><div class="code_line">&nbsp;&nbsp;AcceptEncoding = &#39;gzip, deflate&#39;;</div><div class="code_line">&nbsp;&nbsp;Connection = &#39;keep-alive&#39;;</div><div class="code_line">&nbsp;&nbsp;Referer = &#39;http://172.22.0.1/&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">function GetAuthCode(s: string): string;</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;enc: TIdEncoderMIME;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;enc := TIdEncoderMIME.Create(nil);</div><div class="code_line">&nbsp;&nbsp;Result := enc.EncodeString(s);</div><div class="code_line">&nbsp;&nbsp;enc.Free;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure SetParamsHttp(login, password: string; var http: TIdHTTP);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;http.HandleRedirects := true;</div><div class="code_line">&nbsp;&nbsp;http.AllowCookies := true;</div><div class="code_line">&nbsp;&nbsp;http.Request.Accept := Accept;</div><div class="code_line">&nbsp;&nbsp;http.Request.AcceptEncoding := AcceptEncoding;</div><div class="code_line">&nbsp;&nbsp;http.Request.AcceptLanguage := AcceptLanguage;</div><div class="code_line">&nbsp;&nbsp;http.Request.BasicAuthentication := True;</div><div class="code_line">&nbsp;&nbsp;http.Request.Connection := Connection;</div><div class="code_line">&nbsp;&nbsp;http.Request.Host := host;</div><div class="code_line">&nbsp;&nbsp;http.Request.Username := Login;</div><div class="code_line">&nbsp;&nbsp;http.Request.Password := Password;</div><div class="code_line">&nbsp;&nbsp;if (CurrentReferer &#60;&#62; &#39;&#39;) and (CurrentReferer &#60;&#62; Referer) then</div><div class="code_line">&nbsp;&nbsp; &nbsp;http.Request.Referer := &nbsp;CurrentReferer</div><div class="code_line">&nbsp;&nbsp;else</div><div class="code_line">&nbsp;&nbsp; &nbsp;http.Request.Referer := Referer;</div><div class="code_line">&nbsp;&nbsp;HTTP.Request.CustomHeaders.clear;</div><div class="code_line">&nbsp;&nbsp;HTTP.Request.CustomHeaders.Add(&#39;Authorization: Basic &#39;+GetAuthCode(HTTP.Request.Username+&#39;:&#39;+HTTP.Request.Password));</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.IdHTPAuthorization(Sender: TObject;</div><div class="code_line">&nbsp;&nbsp;Authentication: TIdAuthentication; var Handled: Boolean);</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;Handled := True;</div><div class="code_line">&nbsp;&nbsp;Authentication.Username := edLogin.Text;</div><div class="code_line">&nbsp;&nbsp;Authentication.Password := edPassword.Text;</div><div class="code_line">end;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure TForm1.Button1Click(Sender: TObject);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp;idHp: TIdHTTP;</div><div class="code_line">&nbsp;&nbsp;idIOSSL: TIdSSLIOHandlerSocketOpenSSL;</div><div class="code_line">&nbsp;&nbsp;idCM: TIdCookieManager;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp;idHp := TIdHTTP.Create(nil);</div><div class="code_line">&nbsp;&nbsp;idIOSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil);</div><div class="code_line">&nbsp;&nbsp;idCM := TIdCookieManager.Create(nil);</div><div class="code_line">&nbsp;&nbsp;idHp.CookieManager := idCM;</div><div class="code_line">&nbsp;&nbsp;idHp.IOHandler := idIOSSL;</div><div class="code_line">&nbsp;&nbsp;idhp.OnAuthorization := IdHTPAuthorization;</div><div class="code_line">&nbsp;&nbsp;try</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetParamsHttp(edLogin.Text, edPassword.Text, idhp);</div><div class="code_line">&nbsp;&nbsp; &nbsp;ShowMessage(idHp.Get(&#39;https://172.22.0.1/cgi-bin/um2/ac&#39;));</div><div class="code_line">&nbsp;&nbsp;finally</div><div class="code_line">&nbsp;&nbsp; &nbsp;idCM.Free;</div><div class="code_line">&nbsp;&nbsp; &nbsp;idIOSSL.Free;</div><div class="code_line">&nbsp;&nbsp; &nbsp;idHp.Free;</div><div class="code_line">&nbsp;&nbsp;end;</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>]]></description>
        <author>=SAPSAN=</author>
        <category>Delphi: Сетевое программирование</category>
      </item>
	
      </channel>
      </rss>
	