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)
如果要发布到HTTPS URL,请确保TIdSSLIOHandlerSocketOpenSSL为您尝试连接的服务器正确配置.有可能,默认值可能与服务器实际期望的内容不匹配.特别是,TIdSSLIOHandlerSocketOpenSSL.Method和TIdSSLIOHandlerSocketOpenSSL.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)