我在使用Indy 10时遇到了一个问题,我发布了一个编码为TIdMultiPartFormDataStream
的XML字符串,下面给出了我用来调用POST的代码。大多数情况下,这没有问题,但是我在Windows 7上运行时出现重复错误,只有当XML字符串超过32767字节时,才会抛出#10060连接超时套接字错误。问题
我已经确认它与我发布的服务器无关,因为在Windows XP上使用相同代码/应用程序发送的任何大小的邮件都没有问题。
IdHTTP2 := TIdHTTP.Create();
UsingHTTPS := (Pos(LowerCase('https://'), Trim(LowerCase(URL)))> 0);
if UsingHTTPS then begin
IdSSLIOHandlerSocketOpenSSL2:=TIdSSLIOHandlerSocketOpenSSL.Create();
with IdSSLIOHandlerSocketOpenSSL2 do
begin
SSLOptions.Method := sslvTLSv1;
SSLOptions.Mode := sslmUnassigned;
SSLOptions.VerifyMode := [];
SSLOptions.VerifyDepth := 0;
Port := 443;
end;
end; //if UsingHTTPS
try
try
with IdHTTP2 do
begin //with some browser style defaults
AllowCookies := False;
ProxyParams.BasicAuthentication := False;
//ProxyParams.ProxyPort := 0;
Request.ContentLength := data.Size;
Request.host := '';
Request.CustomHeaders.Clear;
Request.Accept := '';
Request.ContentEncoding := '';
IOHandler:=IdSSLIOHandlerSocketOpenSSL2;
ReadTimeout := -1;
end;
//http post
IdHTTP2.Post(URL, data, response);
有没有人有任何建议来解决这个问题?我试图设置ReadTimeout
变量,但这没有变化。任何解决这个问题的指针都将非常感激。
答案 0 :(得分:1)
TIdSSLIOHandlerSocketOpenSSL
属性为< = 0时, ReadTimeout
在Windows Vista +上的SSL套接字上设置硬编码的30秒读/写超时,因此连接速度可能很慢传输数据的时间超过30秒。尝试将ReadTimeout
属性设置为更高的值,以查看它是否延迟了错误。如果是这样,那么确实存在传输问题。
您可以使用数据包嗅探器(如Wireshark)来确保数据实际上是及时来回传输的。在引发异常时查看调用堆栈,以查看在SSL握手期间,发送HTTP请求或接收HTTP响应时是否发生超时。这将有助于确定它是OpenSSL,Indy还是服务器的问题。