所以这曾经顺利工作但现在我得到了“套接字错误#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;
答案 0 :(得分:6)
如果您要发布到HTTPS网址,请确保为您尝试连接的服务器正确配置了TIdSSLIOHandlerSocketOpenSSL
。有可能,默认值可能与服务器实际期望的内容不匹配。特别是,TIdSSLIOHandlerSocketOpenSSL.Method
和TIdSSLIOHandlerSocketOpenSSL.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;