RSS
热门关键字:  数据挖掘  人工智能  数据仓库  搜索引擎  数据挖掘导论

WinInet 下载文件示例

来源: 作者:unkonwn 时间:2005-08-26 点击:

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

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
匿名?