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

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 두가지 방식 대해 적절한 용도로 사용하시면 됩니다.
이 글이 도움이 되었거나 마음에 든다면,
♥(공감)
눌러주세요!!
궁금한 부분이 있으시다면 댓글 달아주세요~
반응형
'Developers > Delphi[델파이]' 카테고리의 다른 글
[Delphi] 100원 이하 절사 방법 - tip (0) | 2019.09.23 |
---|---|
[delphi] 맥어드레스 가져오기(GetMACAdress2) (0) | 2019.09.17 |
Undeclared identifier 에러 발생 할 때 (1) | 2019.09.16 |