Delphi-如果返回页未找到,则使Idhttp在循环中运行错误
如果未找到return404页面,如何使Idhttp在循环中运行 问题是“gotocheckreach”导致TRY语句进入或退出Delphi-如果返回页未找到,则使Idhttp在循环中运行错误,delphi,idhttp,Delphi,Idhttp,如果未找到return404页面,如何使Idhttp在循环中运行 问题是“gotocheckreach”导致TRY语句进入或退出 标签 再次检查; 开始 再次检查: 尝试 Get(sURL+WebFile[I],S); 除了 关于E:EIdHTTPProtocolException do 如果AnsiPos('404',E.Message)为0,则 开始 I:=I+1; 再次去检查; 结束; 结束; 结束; 一般来说,我会避免使用goto。在某些情况下,应该使用goto,但这种情况很少见,而且您
标签
再次检查;
开始
再次检查:
尝试
Get(sURL+WebFile[I],S);
除了
关于E:EIdHTTPProtocolException do
如果AnsiPos('404',E.Message)为0,则
开始
I:=I+1;
再次去检查;
结束;
结束;
结束;
一般来说,我会避免使用goto
。在某些情况下,应该使用goto
,但这种情况很少见,而且您的问题并不适合
while
循环更常用。您还可以构建最大重试机制。也许是这样的:
RetryCount := 0;
Succeeded := False;
while RetryCount < MaxRetryCount do
try
idhttp.Get(sURL+WebFile[I], S);
Succeeded := True;
break; // success, break out of while loop
except
on E: EIdHTTPProtocolException do
if E.ErrorCode = 404 then
inc(RetryCount)
else
raise;
end;
RetryCount:=0;
成功:=假;
而RetryCount
一般来说,我会避免使用goto
。在某些情况下,应该使用goto
,但这种情况很少见,而且您的问题并不适合
while
循环更常用。您还可以构建最大重试机制。也许是这样的:
RetryCount := 0;
Succeeded := False;
while RetryCount < MaxRetryCount do
try
idhttp.Get(sURL+WebFile[I], S);
Succeeded := True;
break; // success, break out of while loop
except
on E: EIdHTTPProtocolException do
if E.ErrorCode = 404 then
inc(RetryCount)
else
raise;
end;
RetryCount:=0;
成功:=假;
而RetryCount
您有三个选项:
try/except
块,捕获EIdHTTPProtocolException
异常,并检查其ErrorCode
属性是否为404:
repeat
try
IdHttp.Get(sURL+WebFile[I], S);
except
on E: EIdHTTPProtocolException do
begin
if E.ErrorCode <> 404 then
raise;
Inc(I);
Continue;
end;
end;
Break;
until False;
aignoreplies
参数的TIdHTTP.Get()
方法的重载版本,然后您可以告诉Get()
不要在404响应上引发EIdHTTPProtocolException
异常:
repeat
IdHttp.Get(sURL+WebFile[I], S, [404]);
if IdHttp.ResponseCode <> 404 then
Break;
Inc(I);
until False;
重复
Get(sURL+WebFile[I],S[404]);
如果IdHttp.ResponseCode 404,则
打破
公司(一);
直到错误;
您有三种选择:
try/except
块,捕获EIdHTTPProtocolException
异常,并检查其ErrorCode
属性是否为404:
repeat
try
IdHttp.Get(sURL+WebFile[I], S);
except
on E: EIdHTTPProtocolException do
begin
if E.ErrorCode <> 404 then
raise;
Inc(I);
Continue;
end;
end;
Break;
until False;
aignoreplies
参数的TIdHTTP.Get()
方法的重载版本,然后您可以告诉Get()
不要在404响应上引发EIdHTTPProtocolException
异常:
repeat
IdHttp.Get(sURL+WebFile[I], S, [404]);
if IdHttp.ResponseCode <> 404 then
Break;
Inc(I);
until False;
重复
Get(sURL+WebFile[I],S[404]);
如果IdHttp.ResponseCode 404,则
打破
公司(一);
直到错误;
为True时,如果其时间停止,则执行中断操作代码>,或者只是想做点什么的时候代码>注意不要解析异常消息;EIdHTTPProtocolException
异常具有ErrorCode
成员。@TLama感谢,而WantTortryagain做了一些事情
效果很好,关于异常消息EIdHTTPProtocolException
,我不理解这意味着代码上下文中的E
变量也包含包含(已解析)错误代码的ErrorCode
成员。关于它的更多信息,你可能会在中找到,例如,而True do if it timetostop then Break代码>,或者只是想做点什么的时候代码>注意不要解析异常消息;EIdHTTPProtocolException
异常具有ErrorCode
成员。@TLama感谢,而WantTortryagain做了一些事情
效果很好,关于异常消息EIdHTTPProtocolException
,我不理解这意味着代码上下文中的E
变量也包含包含(已解析)错误代码的ErrorCode
成员。关于它的更多信息,你可能会在中找到。