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; 数据挖掘研究院

