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
[15447] Re:Re:idHTTP에러 좀 도와주세요.
첫눈 [hadugo] 2655 읽음    2015-04-04 16:18
먼저 답변 주심에 대해 감사드립니다.

제가 지금 개발하고 있는 프로그램은 말씀드린 바와 같이 웹페이지를 분석하여 데이터를 가져오기 위한 것입니다.

하나의 사이트에서만 데이터를 가져오는 것이 아니고 모두 11개 홈페이지의 데이터를 가져와 집계하고 있는데요.
물론 11개 홈페이지는 각각 다른 사이트이고 모두 https에 로그인 하는 사이트입니다.
처음 개발하였을때는 11개 페이지 모두 이상없이 데이터를 가져올 수 있었습니다.

하지만 몇개월간 이상없이 잘 쓰던 프로그램이 갑자기 어느 특정 사이트에서 데이터를 가져오지 못하는 증상이 나타났습니다.
해당 사이트 이외에 다른 10개 사이트는 정상이구요.

문제가 된 사이트에 크롬웹브라우저로 접속하며 해더를 분석해 보면 달라진 것이 전혀 없습니다.
겉으로 보기에는 홈페이지 개편을 한 것 같지는 않구요.
물론 서버를 직접 볼 수 없으니 내부사정은 알지 못합니다.

어쩔 수 없이 문제가 된 웹사이트의 로그인 부분만 VB와 JAVA로 만들어 테스트를 해보니 전혀 이상없이 로그인이 되고
유난히 델파이에서만 이런 증상이 나타납니다.

지금 2개월 이상을 아무 일도 하지 못하고 이 문제만 잡고 있는데
저로써는 더 이상 시도해 볼만한 것이 없습니다.

차라리 이럴 바엔 VB나 JAVA로 다시 개발할까도 생각을 하고
VB로 개발을 해 보니 VB에서는 또 다른 사이트 하나가 동일한 문제로 해결이 되지 않아 포기했구요.

JAVA로 개발을 해 볼까 했으나 JAVA로 개발하기 위해서는 SWING로 해야 하고
잡다한 이벤트핸들러에 대한 정보가 없어 개발을 시도하다 포기했습니다.

사실 전 도스시절에 개발을 해봤을 뿐
윈도우가 나온 이후에는 개발에서 손을 뗀지라
윈도우 프로그래밍에 대한 이해도 없고
다만 그때 그때 필요한 소스코드들을 인터넷에서 찾아 오려붙여가며 개발을 하는 정도라
뭐하나 개발한다는 것이 여간 어려운게 아니거든요.

그래서 제가 생각하지 못한 부분이 있지 않나 하여 질문을 드렸는데요.

혹시라도 제가 테스트해보아야 할 것을 놓힌 것이 있거나 어떤 실마리라도 있다면 알려주시면 감사하겠습니다.

로그인 아이디가 제것이 아니고 개발을 위해 빌려서 사용하는 것이라
만일 도움을 주실 수 있다 하시면
양해를 구하여 아이디와 암호를 개인적으로 알려드릴 수도 있을듯 합니다.

말씀해주신 ICS컴포넌트에 대해서는 검토를 해보도록 하겠습니다.

다시한 번 답변 감사드립니다.


정영훈 님이 쓰신 글 :
: 음...분명 인디 http 컴포넌트을 많은 분들은 잘 사용하고 있습니다.
: 문제는 오류를 3자가 재현을 해볼 수 있으면 문제해결을 위한 답변을 더 빨리 얻으실 수도 있습니다.
: https 면 델마당도 로그인시에 https 를 사용합니다.
: 그런 사이트들을 상대로 오류를 재현해보세요. 그러면 질문을 보시는 많은 분들도 재현을 해볼 수 있을테고 답변 얻기도 훨씬 수월할겁니다.
: 또한 인디와 더불어 ICS(http://www.overbyte.be/) 라는 컴포넌트도 많이 사용하는 검증된 컴포넌트입니다.
: 해당 컴포넌트도 검토해보세요.
: 첫눈 님이 쓰신 글 :
: : 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); <======== 에러발생 Timeover 
: :       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에러 좀 도와주세요. 정영훈 2779 2015/04/04
15447         Re:Re:idHTTP에러 좀 도와주세요. 첫눈 2655 2015/04/04
15449             Re:Re:Re:idHTTP에러 좀 도와주세요. 오랑캐꽃 2176 2015/04/06
15450                 Re:Re:Re:Re:idHTTP에러 좀 도와주세요. 첫눈 2246 2015/04/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.