我的程序需要连接并打开网页,如果网络通的话就连接网络查看页面,并将页面保存在本地,如果下次网络不通则读取本地的文件。能给我一个详细点的代码吗??

解决方案 »

  1.   

    webbrowser1.Navigate('www.baidu.com');
    Webbrowser.ExecWeb(OLECMDID_SAVEAS,   OLECMDEXECOPT_DODEFAULT);   
      

  2.   

      FIdH := TIdHttp.Create(nil);
      FIdH.HandleRedirects:= true;   //必须支持重定向否则可能出错
      FIdH.ReadTimeout:= 30000;      //超过这个时间则不再访问
      FIdH.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 6.00; Windows 2000';
      
      html := FIdH.get(url);  FIdH.free;然后保存html就可以了.
      

  3.   

    1.查看页面可以用 1楼的webbrowser1.Navigate( 'www.baidu.com '); 
      也可以用idhttp.get查看源文件
    2.下载..下载方式也有很多,(DownFile)主要是保存位置要设置好,创建好保存的文件夹(ForceDirectories),方便下次读取.
    3.读取.(ReadFileToString)仓促间写的一个简单下载的函数,也许你有用
    function DownFile(aSrc, aDest: string): Boolean;//asrc 下载的网页地址 .aDest保存的地址
    var
      F: TFileStream;begin
      try
        if FileExists(aDest) then  DeleteFile(aDest);
        F := TFileStream.Create(aDest, fmCreate or fmOpenWrite);
        with TIdHTTP.Create(nil) do
        try
          HandleRedirects :=True;
          Get(aSrc, F);
          Result := True;
        finally
          Free;
          F.Free;
        end;
      except
         on E: Exception do
            begin
              if (Pos('Socket Error # 10060', e.Message)>0) or
                 (Pos('Socket Error # 10054', e.Message)>0) or
                 (Pos('http:/1.0 404 Not Found', e.Message)>0) or
                 (Pos('Socket Error # 10048', e.Message)>0) then
            end;
      end;
    end;
    function ReadFileToString(const AFileName: string): string;
    var
      H, L: Cardinal;
    begin
      Result := '';
      H := FileOpen(AFileName, fmOpenRead or fmShareDenyNone);
      try
        if H = 0 then Exit;
        L := GetFileSize(H, nil);
        if L = 0 then Exit;
        SetLength(Result, L);
        FileRead(H, Result[1], L);
      finally
        CloseHandle(H);
      end;
    end;