Most servers close connections after a short request timeout,
that may happen even after a request has been successfully sent.
Currently THttpCli doesn't handle this case properly, as there
is no error passed to OnRequestDone and THttpCli.DoRequestSync()
doesn't raise an exception which it should IMO.
So what about a new HTTP error code "httperrNoStatusCode"
and a change in the following code:
{code}
procedure THttpCli.SocketSessionClosed(Sender: TObject; ErrCode: Word);
[..]
{$IFNDEF DO_NOT_USE_COREY_FIX}
if FLocationFlag then
LocationSessionClosed(Self, 0)
else begin
TriggerSessionClosed;
if FState <> httpReady then begin
if (FRequestDoneError = httperrNoError) and (FStatusCode = 0) then
<== block added
begin
FRequestDoneError := httperrNoStatusCode;
FReasonPhrase := 'HTTP no status code (connection closed
prematurely)';
end;
SetReady;
end;
end;
{$ELSE}
[..]
{code}
{code}
procedure THttpCli.DoRequestSync(Rq : THttpRequest);
[..]
{* Jul 12, 2004
WARNING: The component now doesn't consider 401 status
as a fatal error (no exception is triggered). This required a
change in the application code if it was using the exception that
is no more triggered for status 401 and 407.
*}
{* if FStatusCode > 401 then Dec 14, 2004 *}
if (FRequestDoneError <> 0) or ( <== added
(FStatusCode >= 400) and (FStatusCode <> 401) and (FStatusCode <> 407))
then
begin
if FRequestDoneError <> 0 then <== added
raise EHttpException.Create(FReasonPhrase, FRequestDoneError) <==
added
else
raise EHttpException.Create(FReasonPhrase, FStatusCode);
end;
{code}
See also my previous message with subject "Re: [twsocket] Delphi HTTPCli
question".
By setting FRequestDoneError as the ErrorCode property of the exception
one would be able to handle errors much better in sync mode.
What do you/all think?
--
Arno Garrels
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be