Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[15443] idHTTP에러 좀 도와주세요.
첫눈 [hadugo] 2807 읽음    2015-04-03 17:28
Delphi XE2 정식버젼을 사용하고 있습니다.

IdHTTP.Version을 확인해 보면 "10.5.8.0" 이라고 나옵니다.

OS는 Win7 64Bit와 Win8.1 64Bit 양쪽에서 모두 동일한 증상이 나타납니다.



http://xxxxxxx.com/에 로그인 한 후에
http://xxxxxxx.com/data 페이지의 HTML소스를 가져오는 소스코드입니다.

로그인 해더를 분석해 보면 아래와 같습니다.

https://xxxxxxx.com/LogIn
POST /LogIn HTTP/1.1
Host: xxxxxxxx.com
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://xxxxxxxx.com/
Cookie: A2SK=..........
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 30
id=xxxxxx&pw=xxxxxxxx



로그인에 성공하면 리턴되는 문자열 안에 ID가 포함되어 있으니
ID가 포함되어 있는지 여부로 로그인 성공 여부를 확인할 수 있습니다.


에러 증상은 그때 그때 마다 다른데요.


첫번째 에러는 아주 가끔이지만
https://xxxxxxx.com/LogIn에 POST할때 에러가 발생합니다.
에러메세지는 "EidSockError 10038" 이라고 나오구요.

하지만 이 증상은 아주 가끔나오니 크게 문제되지는 않습니다.





두번째 에러가 계속 발생하는데요.

https://xxxxxxx.com/LogIn에 POST할때는 이상이 없습니다.
로그인도 잘 되구요.

하지만 로그인 한 후에
http://xxxxxxxx.com/data의 페이지를 가져오려 하면 ReadTimeout이 나옵니다.

에러메세지는 첨부파일과 같구요.
에러코드는 에러메세지는 "EidSockError 10060" 이라고 나올때가 있고
에러메세지는 "EidSockError 10056" 이라고 나올때가 있습니다.
에러가 나지 않는 경우는 없구요.



하지만 이 에러가 처음 부터 발생한 것은 아닙니다.
타회사 서버이므로 서버에서 어떤 작업을 했는지 몰라도 어느날 부터 갑자기 이런 증상이 나타나기 시작하더니
그 이후로 계속 나타나는데요.



참고로 로그인을 하지 않고
http://xxxxxxx.com/data페이지를 가져와 보면
비록 필요한 데이터는 가져오지 못하지만 페이지를 가져오는데는 문제가 없습니다.

하도 답답해서 JAVA와 VB로 동일한 프로그램을 만들어 보면
물론 첫번째 문제나 두번째 문제 어느 증상도 나타나는 경우가 없습니다.

유난히 델파이에서만 이런 증상이 나타납니다.









Function GetHTML(ID: String; PWD: String) : Striing;
Begin
      Result := '';

      idHttp                    := TidHttp.Create(NIL);
      idHttp.ConnectTimeout     := 1000;
      idHttp.ReadTimeout        := 1000;
      IdHTTP.HandleRedirects    := True;  // HTTP/1.1
      idHttp.Request.Connection := 'keep-alive';
      idHttp.Request.UserAgent  := 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0';
      idHttp.Request.Referer    := 'http://xxxxxxx.com/';
      idSSL                     := TIdSSLIOHandlerSocketOpenSSL.Create(NIL);
      idHttp.IOHandler          := idSSL;
      POSTData                  := TStringList.Create;
//================================== Form ======================================
      POSTData.Values[id']      := ID;
      POSTData.Values[pw']      := PWD;
//================================= Submit =====================================
      URL := 'https://xxxxxxx.com/LogIn';
      TRY
            HTMLStr := IdHTTP.Post(URL,  POSTData, TEncoding.UTF8);
      Except
            POSTData.Free;
            POSTData := Nil;
            idSSL.Free;
            idSSL := Nil;
            idhttp.Free;
            idhttp := Nil;
            Exit;
      END;
      POSTData.Free;
      POSTData := Nil;


//============================== 로그인 확인 ======================================
      IF  POS(ID, HTMLStr) < 0 then  // 로그인 ID가 포함된 문자열이 리턴되면 로그인 성공
      Begin            
            idSSL.Free;
            idSSL := Nil;
            idhttp.Free;
            idhttp := Nil;
            Exit;
      End;
//===============================================================================
//===============================================================================
      Response := TStringStream.Create('');
      HTMLStr  := '';
//================================= Get ==========================================
      URL  := 'http://xxxxxx.com/data';
     TRY
            IdHTTP.Get(URL,  Response);
      Except
            Response.Free;
            Response := Nil;
            idSSL.Free;
            idSSL := Nil;
            idhttp.Free;
            idhttp := Nil;
            Exit;
      END;

      HTMLStr := TEncoding.UTF8.GetString(Response.Bytes, 0, Response.Size);
      Response.Free;
      Response := Nil;
      idSSL.Free;
      idSSL := Nil;
      idhttp.Free;
      idhttp := Nil;

      Result = HTMLStr;
End;


+ -

관련 글 리스트
15443 idHTTP에러 좀 도와주세요. 첫눈 2807 2015/04/03
15446     Re:idHTTP에러 좀 도와주세요. 정영훈 2780 2015/04/04
15447         Re:Re:idHTTP에러 좀 도와주세요. 첫눈 2656 2015/04/04
15449             Re:Re:Re:idHTTP에러 좀 도와주세요. 오랑캐꽃 2177 2015/04/06
15450                 Re:Re:Re:Re:idHTTP에러 좀 도와주세요. 첫눈 2248 2015/04/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.