2015-01-19 1 views
-1

C++/Delphi에서 POST 메서드를 사용하여 웹 서비스를 호출하는 응용 프로그램을 만들었습니다. 그것은 http에서 로컬 호스트에서 잘 작동하지만 프로덕션 서버에서 https 프로토콜을 시도하면 "소켓 오류 # 2"가 발생합니다. 나는 그것이 무엇을 의미하는지 모른다. 웹 서버는 아무런 문제없이 다른 애플리케이션 (Rad Studio가 아님)에 https 서비스를 제공합니다. 내가 사용하는 코드는 웹 사이트에서 추출됩니다Indy 구성 요소에서 "소켓 오류 # 2"의 의미는 무엇입니까?

std::auto_ptr<TIdHTTP> httpPtr(new TIdHTTP(NULL)); 
TIdHTTP *Http = httpPtr.get(); 
try 
{ 
    TIdSSLIOHandlerSocketOpenSSL *SSL = new TIdSSLIOHandlerSocketOpenSSL(Http); 
    // configure SSL settings as needed... 
    Http->IOHandler = SSL; 

    Http->HandleRedirects = true; 
    Http->AllowCookies = false; 
    Http->ConnectTimeout = 10000; 
    Http->ReadTimeout = 10000; 

    Http->Request->BasicAuthentication = true; 
    Http->Request->Password = username; 
    Http->Request->Username = password; 

    Memo1->Text = Http->Post("http://logs.domain.dk", json); 
} 
catch(const Exception &e) 
{ 
    Memo1->Lines->Add(e.ClassName()); 
    Memo1->Lines->Add(e.Message); 
    return; 
} 

업데이트 : 피들러에서 메시지를 볼 수있는 다음 코드를 추가 한

.

IdHTTP1->ProxyParams->ProxyServer = "127.0.0.1"; 
IdHTTP1->ProxyParams->ProxyPort = 8888; 

는 이제 (피들러의 프록시로) 잘 작동하지만 사용자가 피들러를하지 않습니다 때문에 물론, 그것은 해결책이 아니다. 중요한지는 모르지만 https 서버는 일반 https 포트를 사용하지 않습니다. 4001을 사용하지만 URL에이 값을 전달합니다.

IdHTTP1->Post("https://myweb.com:4001/api/certificate", json); 

무슨 일입니까? 나는 혼란 스럽다.

+2

정확한 소켓 오류 번호를 게시 해주십시오. http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668%28v=vs.85%29.aspx –

+0

iHTTP1-> Post()를 호출 한 후 예외가 발생합니다. 내가 얻을 수있는 유일한 정보는 CLASSNAME : EIdSocketError, MESSAGE : Socket Error # 2입니다. 어떻게 소켓 오류 번호를 얻을 수 있습니까? –

+2

예외 대신'EIdSocketError'를 잡아 예외의 ['LastError'] (http://www.indyproject.org/docsite/html/frames.html?frmname=topic&frmfile=EIdSocketError_LastError.html)를 출력하십시오. 그것은 소켓 오류 코드입니다. – TLama

답변

0

이 문제가 8.1

솔루션을 추가하는 것입니다 인디 + SSL + Windows에서 발생하는 것으로 보인다 :

IdHTTP1->ReadTimeout = 30000; 

문제가 해결!

+2

질문에 대한 답을하지 않았습니다. 질문은 2 번 오류가 의미하는 것과 "무슨 일이 일어나고 있는지"를 고려합니다. 당신의 대답은 그러한 것들을 다루지 않습니다. –

+0

죄송합니다. # 2의 의미는 모르겠습니다. 내 XE 버전의 버그 인 것 같습니다. 어쨌든 질문의 목적은 오류없이 응용 프로그램을 실행할 수 있어야한다는 것입니다. –

관련 문제