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);
무슨 일입니까? 나는 혼란 스럽다.
정확한 소켓 오류 번호를 게시 해주십시오. http://msdn.microsoft.com/en-us/library/windows/desktop/ms740668%28v=vs.85%29.aspx –
iHTTP1-> Post()를 호출 한 후 예외가 발생합니다. 내가 얻을 수있는 유일한 정보는 CLASSNAME : EIdSocketError, MESSAGE : Socket Error # 2입니다. 어떻게 소켓 오류 번호를 얻을 수 있습니까? –
예외 대신'EIdSocketError'를 잡아 예외의 ['LastError'] (http://www.indyproject.org/docsite/html/frames.html?frmname=topic&frmfile=EIdSocketError_LastError.html)를 출력하십시오. 그것은 소켓 오류 코드입니다. – TLama