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:\test.txt');
   ShowMessage('完成数据下载');
end;

end. 

相关阅读 >>

Delphi 2010 复制整个文件夹(当然包括嵌套文件夹)

Delphi xe6 android 实现base64字符串的解析

Delphi 排列桌面图标

Delphi中获取光标句柄代码(包含获取当前线程id)

Delphi版pspterminateprocess驱动源码

Delphi xe5 android手机端转换ansi字符串

Delphi android 获取通�记录

Delphi 申请内存空间 内存分配 缓冲区

关于Delphi下的三元运算符(三目运算)

Delphi 怎么截取文件路径字符串,只保留文件名

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...