Uses WinInet
(1)HTTP下载
Function WWWDownFile(Const FTURL,LocalFile : String) : Boolean; //下载函数.
Const
FTAcceptTypes = '*/*';
FTAgent = 'Explorer';
FTUserName = ''; //用户名.
FTPassword = ''; //密码.
FTPort = 80; //端口.
FTPostQuery = 'GET';
FTReferer = '';
Var
hSession, hConnect, hRequest: hInternet;
HostName, FileName: String;
f: File;
Buf: Pointer;
dwBufLen, dwIndex: DWord;
Data: Array[0..$400] of Char;
RequestMethod: PChar;
InternetFlag: DWord;
TimeOut : Cardinal;
AcceptType: LPStr;
BytesToRead,BytesReaded : DWord;
FTFileSize : integer;
Procedure ParseURL(URL: String; var HostName, FileName: String);
Var
i: Integer;
Begin
if Pos('http://', LowerCase(URL)) <> 0 then
System.Delete(URL, 1, 7);
i := Pos('/', URL);
HostName := Copy(URL, 1, i);
FileName := Copy(URL, i, Length(URL) - i + 1);
if (Length(HostName) > 0) and (HostName[Length(HostName)] = '/') then
SetLength(HostName, Length(HostName) - 1);
End;
Procedure CloseHandles;
begin
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hSession);
end;
begin
TimeOut := 6000000;
ParseURL(FTURL, HostName, FileName);
RequestMethod := PChar(FTPostQuery); // 'GET'
InternetFlag := 0;
AcceptType := PChar('Accept: ' + FTAcceptTypes);
if FTAgent <> '' then
hSession := InternetOpen(PChar(FTAgent),
INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0)
else
hSession := InternetOpen(nil,
INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
hConnect := InternetConnect(hSession, PChar(HostName),
FTPort, PChar(FTUserName), PChar(FTPassword),
INTERNET_SERVICE_HTTP, 0, 0);
hRequest := HttpOpenRequest(hConnect, RequestMethod, PChar(FileName), 'HTTP/1.1',
PChar(FTReferer), @AcceptType, InternetFlag, 0);
InternetSetOption(hRequest, INTERNET_OPTION_CONNECT_TIMEOUT,
@TimeOut, SizeOf(TimeOut));
InternetSetOption(hRequest, INTERNET_OPTION_DATA_RECEIVE_TIMEOUT,
@TimeOut, SizeOf(TimeOut));
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);
Result := HttpQueryInfo(hRequest, HTTP_QUERY_CONTENT_LENGTH,
Buf, dwBufLen, dwIndex);
if Result then begin
BytesReaded := 0;
FTFileSize := StrToInt(StrPas(Buf));
AssignFile(f, LocalFile);
Rewrite(f, 1);
while True do begin
if not InternetReadFile(hRequest, @Data, SizeOf(Data), BytesToRead) then
break
else if BytesToRead = 0 then Break
else
BlockWrite(f, Data, BytesToRead);
BytesReaded := BytesReaded + BytesToRead;
End;
Result := FTFileSize = Integer(BytesReaded);
CloseFile(f);
End;
FreeMem(Buf);
CloseHandles;
end;
(2)FTP下载
function TForm1.GetList(ip:string):bool; //得到远程抓拍机内的文件名列表
var
hNet, hFTP,hFind: HINTERNET;
bSuccess: Boolean;
FindData: TWin32FindData;
str:Tstrings ;
begin
//timer1.Enabled:=true;
//control := true;
hNet := InternetOpen('Program_Name', // Agent
INTERNET_OPEN_TYPE_PRECONFIG, // AccessType
nil, // ProxyName
nil, // ProxyBypass
0); // or INTERNET_FLAG_ASYNC / INTERNET_FLAG_OFFLINE
if hNet = nil then
begin
memo1.Lines.Add('缺少动态连接库WinInet.Dll!');
Result := False;
Exit;
end;
timer1.Enabled:=true;
application.ProcessMessages();
{ Connect to the FTP Server }
hFTP := InternetConnect(hNet, // Handle from InternetOpen
pchar('192.168.0.253'), // FTP server
21, // (INTERNET_DEFAULT_FTP_PORT),
PChar('root'), // username
PChar(''), // password
INTERNET_SERVICE_FTP, // FTP, HTTP, or Gopher?
0, // flag: 0 or INTERNET_FLAG_PASSIVE
255);// User defined number for callback
if hFTP = nil then
begin
InternetCloseHandle(hNet);
memo1.Lines.Add('连接'+ip+'成功!准备开始下载!');
Result := False;
Exit;
end;
timer1.Enabled :=false;
{ Change directory }
//timer1.Enabled:=true;
bSuccess := FtpSetCurrentDirectory(hFTP, PChar('/mnt/imagefolder'));
if not bSuccess then
begin
InternetCloseHandle(hFTP);
InternetCloseHandle(hNet);
memo1.Lines.Add('操作抓拍机错误,请检查!');
Result := False;
Exit;
end;
timer1.Enabled:=false;
hFind:= FtpFindFirstFile(hFtp, '*.jpg',FindData, 0, 0);
if hFind = nil then
begin
memo1.lines.add('抓拍机内暂无图片!');
InternetCloseHandle(hFTP);
InternetCloseHandle(hNet);
Result:=false;
Exit;
end;
str:=tstringlist.Create;
str.Clear;
while InternetFindnextFile(hFind, @FindData) do
begin
str.Add(FindData.cfilename);
end;
InternetCloseHandle(hFind);
InternetCloseHandle(hFTP);
InternetCloseHandle(hNet);
Result := true;
end;
function TForm1.download(ReFile,LoFile,ip:string):Bool;
var
Hnet,Hftp:HINTERNET;
bSuccess: Boolean;
bGetFile: Boolean;
begin
hNet := InternetOpen('Program_Name', // Agent
INTERNET_OPEN_TYPE_PRECONFIG, // AccessType
nil, // ProxyName
nil, // ProxyBypass
0); // or INTERNET_FLAG_ASYNC / INTERNET_FLAG_OFFLINE
if hNet = nil then
begin
memo1.Lines.Add('缺少动态连接库WinInet.Dll!');
Result := False;
Exit;
end;
{ Connect to the FTP Server }
hFTP := InternetConnect(hNet, // Handle from InternetOpen
PChar(ip), // FTP server
21, // (INTERNET_DEFAULT_FTP_PORT),
PChar('root'), // username
PChar(''), // password
INTERNET_SERVICE_FTP, // FTP, HTTP, or Gopher?
INTERNET_FLAG_PASSIVE, // flag: 0 or INTERNET_FLAG_PASSIVE
0);// User defined number for callback
if hFTP = nil then
begin
InternetCloseHandle(hNet);
memo1.Lines.add(ip+'不存在!');
Result := False;
Exit;
end;
{ Change directory }
bSuccess := FtpSetCurrentDirectory(hFTP, PChar('/mnt/imagefolder'));
if not bSuccess then
begin
InternetCloseHandle(hFTP);
InternetCloseHandle(hNet);
memo1.Lines.Add('操作错误,请检查!');
Result := False;
Exit;
end;
memo1.Lines.Add('正在下载!'+ReFile);
bGetFile:=ftpgetfile(hftp,
PChar(ReFile),
pchar(LoFile),
false,
File_Attribute_Normal,
Ftp_Transfer_Type_Binary,
0);
if not bGetFile then
begin
memo1.Lines.Add(ReFile+'下载失败!');
inc(ErrNum);
InternetCloseHandle(hFTP);
InternetCloseHandle(hNet);
Result:=False;
Exit;
end;
memo1.lines.add(ReFile+'下载成功!');
sleep(20);
InternetCloseHandle(hFTP);
InternetCloseHandle(hNet);
end;