• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

delphi:取得网页源码内容

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
取得网页的源码内容的函数以及调用方法供大家参考:
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:\test.txt');
   ShowMessage('完成数据下载');
end;

end.

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap