深圳全飞鸿
标题:
idhttp下载大文件时,总是下一部分就结束,问题研究
[打印本页]
作者:
zhgc
时间:
2019-7-3 17:12
标题:
idhttp下载大文件时,总是下一部分就结束,问题研究
本帖最后由 zhgc 于 2019-7-3 17:26 编辑
用idhttp下载文件,碰到神奇的问题。
测试下载外面的大文件(大于100M)也正常 ,
但是下自己的apache中的大文档 ,每次都是60M左右就结束
用filestream 和 memorystream都一样的问题:
var
MyStream:TFileStream;
begin
MyStream:=TFileStream.Create('c:\002.sql', fmCreate);
try
IdHTTP1.Get('http://192.168.2.10/002.sql', MyStream);
ShowMessage('Download Success!');
except
ShowMessage('Download Fail!');
end;
MyStream.Free;
end;
复制代码
var
tStream: TMemoryStream;
begin
tStream := TMemoryStream.Create;
try
IdHTTP1.Get('http://192.168.2.10/bartender_bdald.exe', tStream);
tStream.Position:=0;
tStream.SaveToFile('c:\bartender_bdald.exe');
ShowMessage('Download Success!');
except
ShowMessage('Download Fail!');
end;
tStream.Free;
end;
复制代码
怀疑是header头的问题。抓包比对确实有差异
但改了cookies ,改了content_type, 改了accept,几乎改成了一样,还是不行
后来干脆清掉所有header信息:
idhttp1.Request.RawHeaders.Clear;
idhttp1.Request.CustomHeaders.Clear;
复制代码
奇迹般好了, 但是只好了一次,又不行了。
于是怀疑到了缓存上,清掉IE缓存果然可以好(
为什么 idhttp还是饶不开IE缓存?
)
在代码 里加清缓存的功能 :
uses WinInet
DeleteUrlCacheEntry(PChar('http://192.168.2.10/bartender_bdald.exe'));
IdHTTP1.Get('http://192.168.2.10/bartender_bdald.exe', tStream);
复制代码
到此问题似乎是解决了!
控件有个CacheControl :
IdHTTP1.Request.CacheControl := 'no-cache';
IdHTTP1.Get('http://192.168.2.10/bartender_bdald.exe', tStream);
复制代码
测试了一下,似乎无效!
最后的解决方案,暂定:
uses WinInet
procedure TForm1.Button2Click(Sender: TObject);
var
MyStream:TFileStream;
begin
MyStream:=TFileStream.Create('c:\bartender_bdald.exe', fmCreate);
try
idhttp1.Request.RawHeaders.Clear;
idhttp1.Request.CustomHeaders.Clear;
DeleteUrlCacheEntry(PChar('http://192.168.2.10/bartender_bdald.exe'));
DeleteUrlCacheEntry(PChar('http://192.168.2.10'));
IdHTTP1.Request.CacheControl := 'no-cache';
IdHTTP1.Get('http://192.168.2.10/bartender_bdald.exe', MyStream);
ShowMessage('Download Success!');
except
ShowMessage('Download Fail!');
end;
MyStream.Free;
end;
复制代码
欢迎光临 深圳全飞鸿 (http://www.nagomes.com/disc/)
Powered by Discuz! X3.2