[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 두가지 방식  대해  적절한 용도로 사용하시면 됩니다.

 

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

눌러주세요!!

 

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

반응형

댓글