[Delphi] TIdHTTP 통해 https 통신

반응형
반응형
Indy Component 들 중 IdHTTP라는 Component 이용하여  웹 통신

 

IdHTTP는 http프로토콜 제공해주는 7가지 중 GET, POST방식 모두 사용해서 통신하여  구현하고자 하는 프로그램에 맞게 사용 가능합니다.

델파이 10.3.2 진행

 1. Get 방식 일경우(http, https)

  pURL --> https://도메인주소.com?name1=value1&name2=value2  

 pAuthorization --> Authorization : 인증키 

//{$region 'Https/ Get방식'}
//pURL : 웹주소( https://도메인주소.com?파라미터)   
//pAuthorization  : 인증키(Authorization)
function httpsGet(pURL,  pAuthorization : WideString) : WideString;
Var
  idhttps: TIdHTTP;
  sslIOHandler : TIdSSLIOHandlerSocketOpenSSL;
  lStream : TStringStream;  
begin
  Try
    Result := '';
    idhttps := TIdHTTP.Create();
    lStream := TStringStream.Create(nil);
    sslIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    Try
      sslIOHandler.SSLOptions.Method := sslvSSLv23;
      sslIOHandler.SSLOptions.Mode := sslmClient;

      idhttps.IOHandler := sslIOHandler;

      idhttps.Request.CustomHeaders.Add(pAuthorization);
      idhttps.HandleRedirects :=False;
      idhttps.Request.Method := 'GET';
      idhttps.Response.ContentType := 'application/json; charset=utf-8';
      idhttps.ConnectTimeout := 5000;
      idhttps.ReadTimeout := 5000;
      
      lStream.Position := 0;
      idhttps.Get(pURL, lStream, []);

    Finally
      Result :=  TEncoding.UTF8.GetString(lStream.Bytes,0, lStream.Size); 
      FreeAndNil(lStream);
      FreeAndNil(idhttps);
      FreeAndNil(sslIOHandler);
    End;
  except
    on E: EIdHTTPProtocolException do
    begin
      Result := e.ErrorMessage;   
      FreeAndNil(idhttps);
      FreeAndNil(sslIOHandler);
    end;

  End;
end;
// {$endregion}
2. POST 방식 일경우(http, https)

pURL --> https://도메인주소.com

 

sParam --> name=value

sParam01 -->name01=value01

pAuthorization -->  Authorization : 인증키 

//{$region 'Https/ Post방식'}
//pURL  : 웹주소( https://도메인주소.com)   
//sParam, sParam01 : 파라미터(name=value)
//pAuthorization  : 인증키(Authorization)
function HttpsPost(pURL, sParam, sParam01, pAuthorization : WideString) : WideString;
Var
  idhttps: TIdHTTP;
  sslIOHandler : TIdSSLIOHandlerSocketOpenSSL;
  lStream : TStringStream;
  sl : TStringList;
begin
  Try
    Result := '';
    idhttps := TIdHTTP.Create();
    lStream := TStringStream.Create(nil);
    sl := TStringList.Create;
    sslIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    Try
      sslIOHandler.SSLOptions.Method := sslvSSLv23;
      sslIOHandler.SSLOptions.Mode := sslmClient;
      idhttps.IOHandler := sslIOHandler;
      idhttps.Request.CustomHeaders.Add(pAuthorization);
      idhttps.HandleRedirects := False;
      idhttps.Request.Method := 'POST';
      idhttps.Response.ContentType := 'application/json; charset=utf-8';
      idhttps.ConnectTimeout := 5000;
      idhttps.ReadTimeout := 5000;      
      
      sl.Add(sParam);
      sl.Add(sParam01);     

      lStream.Position := 0;
      idhttps.Post(pURL,sl, lStream);
    Finally
      Result :=  TEncoding.UTF8.GetString(lStream.Bytes,0, lStream.Size);
      FreeAndNil(sl);
      FreeAndNil(lStream);
      FreeAndNil(idhttps);
      FreeAndNil(sslIOHandler);
    End;
  except
    on E: EIdHTTPProtocolException do
    begin
      Result := e.ErrorMessage;
      FreeAndNil(sl);
      FreeAndNil(lStream);
      FreeAndNil(idhttps);
      FreeAndNil(sslIOHandler);
    end;
  End;

end;
//{$endregion}

 

마무리

XE10.3.2에서 한글 깨지는 현상 없이 정상 처리 됩니다.

GET과 POST 두가지 방식  대해  적절한 용도로 사용하시면 됩니다.

 

이 글이 도움이 되었거나 마음에 든다면,
♥(공감)

눌러주세요!!

 

궁금한 부분이 있으시다면 댓글 달아주세요~

반응형

댓글