从120更新到Indy 130软件包,现在这段代码不起作用

Tre*_*vor 2 sockets delphi http-post delphi-2009

所以这曾经顺利工作,但现在我得到了"套接字错误#10054连接由同行重置".

我认为一旦我更新了我的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;
Run Code Online (Sandbox Code Playgroud)

Rem*_*eau 6

如果要发布到HTTPS URL,请确保TIdSSLIOHandlerSocketOpenSSL为您尝试连接的服务器正确配置.有可能,默认值可能与服务器实际期望的内容不匹配.特别是,TIdSSLIOHandlerSocketOpenSSL.MethodTIdSSLIOHandlerSocketOpenSSL.SSLVersions属性默认为TLSv1,但可能服务器不支持TLSv1.

另外,TStringStreamD2009 +的操作方式与早期版本不同,所以我建议你避免使用它,让Indy为你解码文本:

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; 
Run Code Online (Sandbox Code Playgroud)