zoukankan      html  css  js  c++  java
  • delphi : 取得网页源码内容

    取得网页的源码内容的函数以及调用方法供大家参考:
    program geturl;
    uses
    wininet,
    windows;
    //取网页内容
    function StrPas(const Str: PChar): string;
    begin
    Result := Str;
    end;
    function GetWebPage(const Url: string):string;
    var
    Session,
    HttpFile:HINTERNET;
    szSizeBuffer:Pointer;
    dwLengthSizeBuffer:DWord;
    dwReserved:DWord;
    dwFileSize:DWord;
    dwBytesRead:DWord;
    Contents:PChar;
    begin
    Session:=InternetOpen('',0,niL,niL,0);
    HttpFile:=InternetOpenUrl(Session,PChar(Url),niL,0,0,0);
    dwLengthSizeBuffer:=1024;
    HttpQueryInfo(HttpFile,5,szSizeBuffer,dwLengthSizeBuffer,dwReserved);
    GetMem(Contents,dwFileSize);
    InternetReadFile(HttpFile,Contents,dwFileSize,dwBytesRead);
    InternetCloseHandle(HttpFile);
    InternetCloseHandle(Session);
    Result:=StrPas(Contents);
    FreeMem(Contents);
    end;
    调用方法 GetWebPage(网页地址);
    Delphi取得网页源码内容的另一种办法
    unit Unit1;
    
    interface
    
    uses
       Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
       Dialogs, StdCtrls, Sockets;
    
    type
       TForm1 = class(TForm)
         Button1: TButton;
         TcpClient1: TTcpClient;
         Memo1: TMemo;
         Edit1: TEdit;
         procedure Button1Click(Sender: TObject);
       private
         { Private declarations }
       public
         { Public declarations }
       end;
    
    var
       Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
       Test: string;
       HttpLen: integer;
    begin
       TcpClient1.RemoteHost := 'www.163.cn';
       TcpClient1.RemotePort := '80';
       TcpClient1.Active := true;
       if TcpClient1.Connected then
       begin
         //发送HTTP1.1指令
         TcpClient1.Sendln('GET / HTTP/1.1');
         TcpClient1.Sendln('Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/msword, */*');
         TcpClient1.Sendln('User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Maxthon)');
         TcpClient1.Sendln('Host: www.163.cn');
         TcpClient1.Sendln('Connection: Keep-Alive');
         TcpClient1.Sendln('');
       end;
       HttpLen := 0;
       //循环读取所有返回的数据头信息
       while true do
       begin
         Test := TcpClient1.Receiveln();
         Memo1.Lines.Add(Test);
         if Test = '' then Break;
         if Pos('Content-Length: ', Test) > 0 then
         begin
           Delete(Test, 1, 16);
           HttpLen := StrToInt(Test); //获取将要读取的数据长度
         end;
       end;
       LockWindowUpdate(Memo1.Handle);
       Memo1.Clear;
    //循环读取所有返回的数据直接数据接收完毕
       while (Length(Memo1.Text) < HttpLen - 2) or (TcpClient1.WaitForData(0) and (HttpLen = 0)) do
       begin
         Memo1.Lines.Add(TcpClient1.Receiveln(#$0D#$0A));
         Application.ProcessMessages;
         Edit1.Text := Format('总长度:%d   已下载:%d ', [HttpLen, Length(Memo1.Text)]);
       end;
    
       //有些网页返回的非ANSI字符串,则需要转码,否则中文全是乱码
       if Length(Memo1.Text) = HttpLen - 2 then Memo1.Text := Utf8ToAnsi(Memo1.Text);
    
       LockWindowUpdate(0);
       Memo1.Lines.SaveToFile('d:	est.txt');
       ShowMessage('完成数据下载');
    end;
    
    end.
    

      

  • 相关阅读:
    收集一些jQueryMobile的插件和案例[转]
    关于美工ps出图table格式的处理
    Sencha Touch 1.1.1 之初接触(一)怎样入手并写一个漂亮的demo[转]
    把Excel文件数据导入数据库,支持多工作表
    批量Excel数据导入Oracle数据库
    关于ASP.NET 中站点地图sitemap 的使用
    视频播放器
    asp.net SqlParameter关于Like的传参数无效问题(转载)
    分页
    告别ASP.NET操作EXCEL的烦恼
  • 原文地址:https://www.cnblogs.com/94YY/p/3481372.html
Copyright © 2011-2022 走看看