Random Indy ResponseCode = -1 / EIdSocketError Socket Error # 0 Ausnahmen
Ich habe einen Delphi-Code, der im Grunde genommen Dateien auf Remote hochlädtsichern Server mitIndy 10.4.704:
<code> IdHTTP := TIdHTTP.Create(nil); try TheCompressor := TIdCompressorZLib.Create(nil); TheSSL := TIdSSLIOHandlerSocketOpenSSL.Create(nil); with IdHTTP do begin HTTPOptions := [hoForceEncodeParams]; AllowCookies := True; HandleRedirects := True; ProtocolVersion := pv1_1; IOHandler := TheSSL; Compressor := TheCompressor; end; // with // Get upload resume offset try IdHttp.Head('https://www.domain.com/my-file.bin'); if (IdHttp.Response.ResponseCode <> 404) And (IdHttp.Response.ContentLength >= 0) then StartPos := IdHttp.Response.ContentLength else StartPos := 0; except StartPos := 0; end; // try/except // Upload File TheFile := TFileStream.Create(FileName, fmOpenRead OR fmShareDenyWrite); RangeStream := TIdHTTPRangeStream.Create(TheFile, StartPos, -1, True); try if (RangeStream.ResponseCode = 206) then IdHTTP.Post(https://www.domain.com/upload.php', RangeStream); finally RangeStream.Free; end; // try/finally finally FreeAndNil(IdHTTP); end; // try/finally </code>
Das Problem ist, dassmanchmal Der Code schlägt fehl, wenn Indy einen wirftEIdSocketError Socket Error # 0 Ausnahme (idHTTP.ResponseCode ist -1)
Angesichts meiner beschissenen Internetverbindung habe ich eine EC2-Windows-Instanz gestartet und meinen Code darauf getestet (die Windows-Instanz wird in der Cloud ausgeführt, daher gehe ich von einer Verbindung ausist nicht ein Problem), aber ich habe das gleiche Problem!
Der Fehler scheint zufällig zu sein, manchmal funktioniert das Hochladen, manchmal nicht. Ich habe mit TidLogFile debuggt. Alles, was ich finden konnte, ist etwa Folgendes:
<code>Stat Connected. Sent 4/26/2012 4:18:42: POST /app/upload.php... Sent 4/26/2012 4:18:42: <uploaded_file_data_here> Stat Disconnected. </code>
Weiß jemand woran das liegt / wie man das behebt?
BEARBEITEN
I Die Ausnahme wurde auf TIdSSLIOHandlerSocketOpenSSL zurückgeführt. Ich habe viel gegoogelt, es scheint kein SSL-Fehler zu sein.