用什么控件和代码能实现不下载网页就可以取得网页原代码,我分不多了,回答对了,我另开一帖补分(50分)

  • 主题发起人 主题发起人 walkmangood
  • 开始时间 开始时间
W

walkmangood

Unregistered / Unconfirmed
GUEST, unregistred user!
如提

我用webbrowse可以取得原代码,因为要下载图片和FLAS,太慢了,我想应该有不用进入网页就可以把网页原代码分析出来的程序
 
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;
 
要用什么控件实现你上边的代码?
 
在Uses 里加入 WinInet就可以了
 
用httpget
下载:http://www.vclxx.org/DELPHI/D32FREE/HTTPGET.ZIP
httpget1.url:= 'http://www.xxx.com/xxx.htm';
httpget1.GetString;
在onDoneString事件里加入showmessage(result);就可以了
 
其实Http.Zip就是调用了WinInet里的函数实现的,
值得推荐哦,
呵呵~~~~~~~~~~~~~
 
谢谢楼上的弟兄们,我先试试,试好了立刻给分!
 
httpget怎么安装啊,我已经下了
 
我的是DELPHI6安装不上去啊,有没有D6版本
 
如果你用D6或D7,用Indy中的IdHttp好了
HTML:=IdHttp.Get('http://www.delphibbs.com');
 
咦,
不会吧,
httpget的PAS文件里没有版本之分的呀,
不过我用的是D5,这版本用久了舍不得,
出了什么错识,
贴出来好不咯????
呵呵~~~~~~~~~~~~~~~~~~~~~~~~~

To pihome
老兄,如果idHttp方便的话,贴出他的源码来好不咯,我想看看idHttp 和 HttpGet有什么不同之处耶,麻烦你啦!!!!!!!!
 
还是不行啊

TO vxhm,你的可以但是速度很慢啊

TO SexyGG:你的办法在D6下不能安装,请你给指点一下。

TO:pihome, 你的办法不知道怎么实现。要下载哪些文件,我找到了那个网站,不知道怎么用,苯啊

谢谢楼上的各位兄台,请继续提供线索,我会在开100分答谢大家。
 
想着你那100分,
我再说一个东东:TWebCopy
这个绝对的正点咯~~~~~~~~~~~~~~~~~
呵呵~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
不劳大家了,D6不是带了一个INDY吗,有个例子可以实现俺的功能。
 
用IDHTTP为什么取网页原代码很慢有什么办法提高速度,我发现IDHTTP是等全部下载完成才把原代码给我们显示出来,能不能边下载边取代码,象IE那样,下载多少打开多少?
这是最后一个问题了,这个回答完就揭贴。

我用的是INDY9。0,里面没有HTTPCLIENT的例子
 
随便写了个例子,仅供参考

unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, ComCtrls;

type
TMainForm = class(TForm)
IdHTTP: TIdHTTP;
edURL: TEdit;
btDownload: TButton;
mmHTML: TMemo;
procedure btDownloadClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure OnWrite(Sender: TObject; const Buffer; Count: LongInt);
end;

TWriteEvent = procedure(Sender: TObject; const Buffer; Count: LongInt) of Object;

TDownStream = class(TStream)
private
FOnWrite: TWriteEvent;
public
function Read(var Buffer; Count: Longint): Longint; override;
function Write(const Buffer; Count: Longint): Longint; override;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
published
property OnWrite: TWriteEvent read FOnWrite write FOnWrite;
end;

var
MainForm: TMainForm;

implementation

{$R *.dfm}

{ TDownStream }

function TDownStream.Read(var Buffer; Count: LongInt): Longint;
begin
Result:=0;
end;

function TDownStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
begin
Result:=0;
end;

function TDownStream.Write(const Buffer; Count: LongInt): Longint;
begin
Result:=Count;

if Assigned(FOnWrite) then
FOnWrite(Self,Buffer,Count);
end;

{ TMainForm }

procedure TMainForm.btDownloadClick(Sender: TObject);
var
Stream: TDownStream;
begin
Stream:=TDownStream.Create;
try
Stream.OnWrite:=OnWrite;
mmHTML.Clear;
IdHttp.Get(edURL.Text,Stream);
finally
Stream.Free;
end;
end;

procedure TMainForm.OnWrite(Sender: TObject; const Buffer; Count: LongInt);
begin
mmHTML.Text:=mmHTML.Text+Copy(PChar(@Buffer),0,Count);
end;

end.
 
多人接受答案了。
 

Similar threads

回复
0
查看
1K
不得闲
D
回复
0
查看
866
DelphiTeacher的专栏
D
D
回复
0
查看
835
DelphiTeacher的专栏
D
D
回复
0
查看
784
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部