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

Delphi取得网页内容的另一种办法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

初步了解了一下HTTP1.1 小试了一下,利用TcpClient控件发送HTTP1.1命令到IIS后取得网页内容。

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.

这只是小试了一下HTTP1.1的几个指令,通过多线程等,可以让这个程序更完美一点,以后再搞。并且这里也只是试了一下GET方式的指令,有空再试试POST方法向IIS提交数据等功能。


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
让DELPHI自带的richedit控件显示图片发布时间:2022-07-18
下一篇:
Delphi7连接MySql5.5.15发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

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

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

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