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

时间:2012-06-11 22:28:13

标签: delphi sockets 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;

1 个答案:

答案 0 :(得分:6)

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

另一方面,TStringStream在D2009 +中的操作方式与早期版本中的操作方式不同,因此我建议您避免使用它,让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;