请教一个程序的思路。。。(高难度)(200分)

  • 主题发起人 主题发起人 hongxang
  • 开始时间 开始时间
H

hongxang

Unregistered / Unconfirmed
GUEST, unregistred user!
程序要求:
输入一个url(链接地址,一般为rar的压缩文件,文件大小在1兆至2g之间),判断能否下载(地址是否有效)。如果无效返回一个参数0,如果有效,再判断这个文件是否大于1兆,如果小等于1兆返回1,如果大于1兆返回2.

各位大虾有办法吗?
 
InternetOpen -> InternetConnect -> HttpOpenRequest -> HttpQueryInfo
就这几个函数了,上msdn查查吧
 
随手写的一个大概:

var
hSession, hConnect, hRequest: hInternet;
HostName, FileName: string;
AAgent: string;
Buf: Pointer;
dwBufLen, dwIndex: DWord;
RequestMethod: PChar;
InternetFlag: DWord;
AcceptType: LPStr;
procedure CloseHandles;
begin
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);
end;

begin
try
ParseURL(FURL, HostName, FileName);

hSession := InternetOpen(nil,INTERNET_OPEN_TYPE_PRECONFIG, nil,nil,0);//没有使用代理

hConnect := InternetConnect(hSession, PChar(HostName), INTERNET_DEFAULT_HTTP_PORT,
nil,nil, INTERNET_SERVICE_HTTP, 0, 0);//这里可能需要用户名和密码

RequestMethod := 'GET'

InternetFlag := INTERNET_FLAG_RELOAD;

AcceptType := PChar('Accept: ' + '*/*');
hRequest := HttpOpenRequest(hConnect, RequestMethod, PChar(FileName), 'HTTP/1.0',
PChar(FReferer), @AcceptType, InternetFlag, 0);

HttpSendRequest(hRequest, nil, 0, nil, 0)

dwIndex := 0;
dwBuflen := 1024;
GetMem(Buf, dwBuflen);
FResult := HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LENGTH, Buf, dwBuflen, dwIndex);

if FResult then FFileSize := StrToInt(StrPas(Buf));//这里就是文件大小了
{...比较文件的大小...}
FreeMem(Buf);

CloseHandles;
except
end;
 
to jlutt-sadan
问你一下在使用 RequestMethod := 'GET' 的时候,是不是等于将url下载到本地?

因为我以前用asp的xmlhttp判断url是否有效的时候,会遇到一个问题,就是速度会常慢。因为asp的xmlhttp的get的方法等于下载url进行判断head。

不知道delphi的如何?是下载后进行判断,如果是这样一定不行,因为有的文件有2g之大。
还望请教。
 
用HEAD方法
 
后退
顶部