在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
取得网页的源码内容的函数以及调用方法供大家参考: 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.
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论