귀하는 손님 이십니다
로그인
회원가입
  
  델마당 공식 은행계좌
  하나은행 227-910235-83607
  예금주 이상국(운영진)
프로젝트 게시판
투표게시판
델마당소개
기초부터 활용까지! 델파이 교육 - 데브기어
질문과 답변 질문과 답변 입니다.
글내용 - 질문과 답변
 [질문] indy http post 문의
참새
(김진욱)
2020-07-21 오후 8:42:44
477회 조회


첨부파일 다운로드
idhttp호출.JPG

1. 개발/실행 플랫폼

(1) OS : win

(2) 개발툴 : 델파이 2009

(3) 사용 Database :

2. 개발 중인 프로그램 indy http rest api 호출

3. 질문 내용

안녕하세요. 최근에 글을 여러번 남기고 있네요.. 답답한 마음에 다시 질문드립니다. ㅠㅠ

우선은 제가 하고 있는건 JSON형식으로 REST API 호출하고 있으며, 그 중간에 AES128, CBC, PKCS5PADDING 으로 암복호화 및 BASE64로 인/디코딩하여 호출개발하고 있습니다.

JAVA버전으로 호출완료하여 델파이버전으로 변경해서 개발중이며, 이제 indy 사용하고 api 호출 부분 개발중에 있습니다.

INDY 버전은 10.2.5 사용중이며, 주소가 https 라서 tidhttp, TidSSLIOhandlerSocketOpenSSL, TidLogEvent 3개 사용하여 연결해서 log까지 찍어보면서 개발중이며, request 구문에서 customHeaders쪽도 추가하여 리퀘스트 구문 만들어서 post 날리고 있으나

connection 은 되었다고 나오나 exception 에서 Connection Closed Gracefully 로 예외나오고 있는 상황입니다.

저 메세지가 에러가 아니라 연결이 정상종료로 나오는 메세지는 알겠는데 respons값이 아무것도 날아오지 않아서 질문을 남기게 되었습니다.

    sslHandle := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    sslHandle2.SSLOptions.Method := sslvSSLv23;
    sslHandle2.SSLOptions.Mode := sslmClient;

    idHTTP2.Request.ContentType := 'application/json; charset=utf-8';
    idHTTP2.Request.ContentEncoding := 'utf-8';
    idHTTP2.Request.Accept := 'application/json; charset=utf-8';

IdHTTP2.Request.UserAgent := 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 safari/537.36';

   IdHTTP2.Response.ContentType := 'application/json; charset=utf-8';

   idHTTP2.Request.CustomHeaders.Values['X-Openpoint'] := 'burC=OA26|aesYn=Y';

   url2 := 'https://호출url:8903/op';

 

try
          showmessage('JsonToSend2 보내는스트림사이즈' + IntToStr(JsonToSend2.Size));
//          IdHTTP2.Connect;
//          resultstr := idHTTP2.Post(url2, JsonToSend2);
          // post 스트림으로
          idHTTP2.Post(url2, JsonToSend2, rcvStream2);
          //post 와이드스트림.

          showmessage('스트림사이즈' + IntToStr(rcvStream2.Size));
          showmessage('resultstr :' + resultstr);
        except
//          on e : EIdHTTPProtocolException do
//          begin
//            showmessage('익셉션EIdHTTPProtocolException = ' + e.Message);
//          end;
          on e: EIdHTTPProtocolException do
          begin

          end;

          on e: Exception do
          begin
            showmessage('스트림사이즈' + IntToStr(rcvStream2.Size));
            showmessage('안에 익셉션 그레이스풀리Eception = ' + e.Message);
          end;

        end;

        showmessage('wide스트림 결과 :' + resultstr);
//        resStr2 := TEncoding.UTF8.GetString(rcvStream2.Bytes, 0, rcvStream2.Size);
//        showmessage('스트림내용 = ' + (rcvStream2.ToString));
//        showmessage('스트림사이즈' + IntToStr(rcvStream2.Size));

 

소스가 너무 이것저것 하다보니 너무 조잡하긴 한데 문제점은 응답stream을 받을수 없다는게 문제점이며,

혹시나 idhttp 호출이 따로 서버단에서 뭘 열어줘야하거나 그런게 있을까요 아니면 델파이단에서 뭔가 셋팅을 잘못한걸까요

이미지는 만들어진 header부분과 body단 암호화 구문입니다.