近期有一问题困扰我好久不得解决,盼有高手来帮一把:
我用基于WinInet 的Api函数InternetOpen,InternetConnnect,HttpOpenRequest,HttpSendRequest,HttpQueryInfo,InternetReadFile等下载文件.
成功下载没问题,但是,如果,第一次下载成功后,随即更新服务器上被下载的文件,以后再下载的,都是更新前的文件。为了防止从缓存中读取,对相关API参数作了强调:
//Internet访问读取标记
InternetFlag := INTERNET_FLAG_RELOAD + INTERNET_FLAG_NO_CACHE_WRITE + INTERNET_FLAG_HYPERLINK+INTERNET_FLAG_PRAGMA_NOCACHE;
但是,问题依旧,下载的还是更新前的文件。部分代码如下:
//********************************************************************************
//使用代理服务器
InternetOpen(PChar(FTAgent),INTERNET_OPEN_TYPE_PROXY, PChar(FGetStyleString), Nil,0)
.......
//使用HTTP的默认端口下载
hConnect := InternetConnect(hSession, PChar(HostName),
INTERNET_DEFAULT_HTTP_PORT, PChar(FTUserName), PChar(FTPassword), INTERNET_SERVICE_HTTP,0, 0);
......
//Internet访问读取标记
InternetFlag := INTERNET_FLAG_RELOAD + INTERNET_FLAG_NO_CACHE_WRITE + INTERNET_FLAG_HYPERLINK+INTERNET_FLAG_PRAGMA_NOCACHE;
......
hRequest := HttpOpenRequest(hConnect, RequestMethod, PChar(FileName), 'HTTP/1.0',
PChar(FTReferer), @AcceptType, InternetFlag, 0);\
......
if FTPostQuery = '' then
HttpSendRequest(hRequest, nil, 0, nil, 0)
else
HttpSendRequest(hRequest, 'Content-Type: application/x-www-form-urlencoded', 47,
PChar(FTPostQuery), Length(FTPostQuery));
......
dwIndex := 0;
dwBufLen := 1024;
GetMem(Buf, dwBufLen); FTResult := HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LENGTH,
Buf, dwBufLen, dwIndex);
......
if not InternetReadFile(hRequest, @Data, SizeOf(Data), BytesToRead) then Break
else
if BytesToRead = 0 then Break
else
begin
if FTToFile then
BlockWrite(f, Data, BytesToRead)
else
begin
TempStr := Data;
SetLength(TempStr, BytesToRead);
FTStringResult := FTStringResult + TempStr;
end; inc(BytesReaded, BytesToRead);
end;
end;
我用基于WinInet 的Api函数InternetOpen,InternetConnnect,HttpOpenRequest,HttpSendRequest,HttpQueryInfo,InternetReadFile等下载文件.
成功下载没问题,但是,如果,第一次下载成功后,随即更新服务器上被下载的文件,以后再下载的,都是更新前的文件。为了防止从缓存中读取,对相关API参数作了强调:
//Internet访问读取标记
InternetFlag := INTERNET_FLAG_RELOAD + INTERNET_FLAG_NO_CACHE_WRITE + INTERNET_FLAG_HYPERLINK+INTERNET_FLAG_PRAGMA_NOCACHE;
但是,问题依旧,下载的还是更新前的文件。部分代码如下:
//********************************************************************************
//使用代理服务器
InternetOpen(PChar(FTAgent),INTERNET_OPEN_TYPE_PROXY, PChar(FGetStyleString), Nil,0)
.......
//使用HTTP的默认端口下载
hConnect := InternetConnect(hSession, PChar(HostName),
INTERNET_DEFAULT_HTTP_PORT, PChar(FTUserName), PChar(FTPassword), INTERNET_SERVICE_HTTP,0, 0);
......
//Internet访问读取标记
InternetFlag := INTERNET_FLAG_RELOAD + INTERNET_FLAG_NO_CACHE_WRITE + INTERNET_FLAG_HYPERLINK+INTERNET_FLAG_PRAGMA_NOCACHE;
......
hRequest := HttpOpenRequest(hConnect, RequestMethod, PChar(FileName), 'HTTP/1.0',
PChar(FTReferer), @AcceptType, InternetFlag, 0);\
......
if FTPostQuery = '' then
HttpSendRequest(hRequest, nil, 0, nil, 0)
else
HttpSendRequest(hRequest, 'Content-Type: application/x-www-form-urlencoded', 47,
PChar(FTPostQuery), Length(FTPostQuery));
......
dwIndex := 0;
dwBufLen := 1024;
GetMem(Buf, dwBufLen); FTResult := HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LENGTH,
Buf, dwBufLen, dwIndex);
......
if not InternetReadFile(hRequest, @Data, SizeOf(Data), BytesToRead) then Break
else
if BytesToRead = 0 then Break
else
begin
if FTToFile then
BlockWrite(f, Data, BytesToRead)
else
begin
TempStr := Data;
SetLength(TempStr, BytesToRead);
FTStringResult := FTStringResult + TempStr;
end; inc(BytesReaded, BytesToRead);
end;
end;
解决方案 »
- delphi读取word,并建立目录,求高手帮忙。
- 奇怪的语法有误,有大家帮忙看看,谢谢!
- 哪里有TIdTCPServer和TIdTCPClient的详细介绍?
- 如何获得打印机的状态?如何控制打印机中的打印队列?
- 如何删除非空表?
- 怎样才能让我编写的一个键盘hook,只截获自定的程序的键盘消息,给点参考资料,谢先
- 挑战Windows编程高手
- 要把文件存入SQL SERVER 2000,请问用什么数据类型?
- 急.....---为何无法创建???(20分)
- 有谁能提供InstallShield Express for delphi5下载点
- 用WinInet下载文件,服务器都更新了,下载的怎么还是原来的?清除缓存也没用
- fastreport3 自己做了一个预览界面 如何实现对当前预览报表的编辑
fs: TFileStream;
begin
fs := TFileStream.Create('c:\99.zip', fmCreate);
IdHttp1.Request.ProxyServer:='112.20.50.151';
IdHttp1.Request.ProxyPort:=806;
IdHTTP1.Get('Http://xxxxxx.xxx.xxx.xxxx/xx.zip', fs);
fs.Free;
end;但是,老是出错:Socket Error#10054 Connection Reset By Peer!
请大侠们指教。