2012-06-11 1 views
2

이것은 장애없이 작동하는데 사용되었지만 지금은 "소켓 오류 # 10054 연결을 동료에 의해 재설정"됩니다.120에서 Indy 130 패키지로 업데이트되었습니다. 이제이 코드는 작동하지 않습니다.

Indy 패키지를 업데이트하면 시작되었다고 가정합니다. 그 이후로 처음으로 코드를 실행했습니다.

업데이트로 인해이 코드의 동작이 어떻게 바뀌 었는지 설명 할 수 있습니까? 해결 방법은 무엇입니까?

당신은

function PostData(url : string; param: TStringList) : string; 
var 
    text: string; 
    sHttpSocket: TIdHTTP; 
    sshSocketHandler: TIdSSLIOHandlerSocketOpenSSL; 
    resStream: TStringStream; 
begin 
    sHttpSocket := TIdHTTP.create; 
    sshSocketHandler := TIdSSLIOHandlerSocketOpenSSL.create; 
    sHttpSocket.IOHandler := sshSocketHandler; 
    sHttpSocket.Request.ContentType := 'application/x-www-form-urlencoded'; 
    sHttpSocket.Request.Method := 'POST'; 
    resStream := TStringStream.create; 
    sHttpSocket.Post(url, param, resStream); 
    resStream.Seek(0, soFromBeginning); 
    text := resStream.DataString; 
    result := text; 
end; 
+0

는 인디 정기적으로 내부적으로 예외를 사용을 부정확하게, 그리고 그것은 인디를 사용하는 것의 문제 중의 1 개다). IDE 외부에서 실행할 때 예외가 표시됩니까? 일반적으로 예외는 런타임에 올바르게 처리되며 디버거가 오류를 catch하는 IDE에서만 실행됩니다. 또한 IDE 외부에서 발생하는 경우 실제로 예외를 트리거하는 행을 표시 할 수 있습니다 (디버거에서 실행할 수 있으므로 예외가 발생하는 행을 중단시킬 수 있음). –

+0

이 줄에서 발생합니다. sHttpSocket.Post (url, param, resStream); IDE 외부에서 실행 해보겠습니다. 감사합니다. – Trevor

+0

IDE 외부에서 작동하지 않습니다. 어쩌면 끝이 무언가가 될 수도 있습니다.하지만 확실하지 않습니다. 너희들은 어떻게 생각하니? 도와 주셔서 감사합니다. – Trevor

답변

5

당신이 HTTPS URL로 게시하는 경우, TIdSSLIOHandlerSocketOpenSSL가 연결을 시도하는 서버에 대해 올바르게 구성되어 있는지 확인 감사드립니다. 기본 설정은 서버가 실제로 기대하는 것과 일치하지 않을 수도 있습니다. 특히 TIdSSLIOHandlerSocketOpenSSL.MethodTIdSSLIOHandlerSocketOpenSSL.SSLVersions 속성의 기본값은 TLSv1이지만 서버가 TLSv1을 지원하지 않을 수 있습니다. 이 이전 버전에 비해 보조 노트에

TStringStream은 D2009의 +에서 다르게 작동한다, 그래서 당신이 그것을 피할 제안 및 인디는 당신을위한 텍스트 디코딩 할 것이다 : IMO (

function PostData(const url : string; params: TStrings) : string; 
var 
    sHttpSocket: TIdHTTP; 
    sshSocketHandler: TIdSSLIOHandlerSocketOpenSSL; 
begin 
    sHttpSocket := TIdHTTP.Create; 
    try 
    sshSocketHandler := TIdSSLIOHandlerSocketOpenSSL.Create(sHttpSocket); 
    // configure sshSocketHandler as needed... 
    // perhaps try this at a minimum: 
    // sshSocketHandler.SSLOptions.Method := sslvSSLv23; 
    sHttpSocket.IOHandler := sshSocketHandler; 
    Result := sHttpSocket.Post(url, params); 
    finally 
    sHttpSocket.Free; 
    end; 
end; 
+0

와우 .. 고마워, 방법을 sslvSSLv23에 설정 했어! – Trevor

관련 문제