如何在下载之前查看JPG网址是否存在,以避免出现异常?
procedure TForm1.Button1Click(Sender: TObject);
var
FS: TFileStream;
Url, FileName: String;
I, C: Integer;
begin
for I := 1 to 1000 do
begin
Url := 'http://www.mysite.com/images/' + IntToSTr(I) + '/Image.jpg';
FileName := 'C:\Images\' + IntToStr(I) + '.jpg';
FS := TFileStream.Create(FileName, fmCreate);
try
try
IdHTTP1.Get(Url);
c := IdHTTP1.ResponseCode;
if C = 200 then
IdHTTP1.Get(Url, FS);
except
end;
Application.ProcessMessages;
finally
Fs.Free;
end;
end;
end;
答案 0 :(得分:8)
要回答您的主要问题,您必须检查特定网址是否有效的唯一方法是检查网络服务器并检查服务器告诉您的内容。
使用indy,您可以使用Get和其他方法的AIgnoreReplies
参数来指示TIdHTTP实例在Web服务器返回状态时不引发异常,如下所示:
IdHTTP1.Get(Url, FS, [404]);
如果状态不同于200和400,仍会引发异常。根据组件的各种配置,还有其他状态代码可能不会引发异常,例如状态代码401和身份验证参数,以及其他
那说, 我在你的代码中发现了几个问题:
EOutOfMemory
视为EIdSocketError
,EIdHTTPProtocolException
甚至是EMayanWorldEnd
例外情况!GET
命令,执行HEAD
!答案 1 :(得分:2)
如果您首先下载所有互联网,那么您可以检查您的Exabyte数据收集是否存在该图片。
否则,您将不得不处理该文件不存在的情况。
您还必须处理各种其他错误,例如超时,或者您的网络抓取器达到下载限制并被阻止。