반응형
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 |