`
touchmm
  • 浏览: 1037401 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多

关键词:IdHTTP ,RegExpr,正则表达式,链接

目的:取得Web页面中的链接及链接文字。

操作:

1.使用IdHTTP获取网页的源码。

2.使用RegExpr定义正则表达式,获取网页中的链接及链接文字。


实现方法如下:

//使用正则表达式,匹配网页源码,抽取内容。
procedure GetLinkFromHtml(Const SourceHtmlTxt,Pattern:String; var aList:TStringList);
var RegExp : TRegExpr;
HasMatch:Boolean;
begin
RegExp := TRegExpr.Create;

try
RegExp.Expression := Pattern; //范式
HasMatch:=RegExp.Exec(SourceHtmlTxt);

while HasMatch do
begin
//aList.Add(RegExp.Match[0]);
aList.Add(RegExp.Match[2]+'='+RegExp.Match[1]);
HasMatch := RegExp.ExecNext;
end;
finally
FreeAndNil(RegExp);
end;
end;

//解析网页源码内容,用正则表达式读取所需链接。
procedure ParsePageContent(pageText:String; var aList:TStringList);
var aPattern:String;
begin
//正则表达式
//链接形如:<A href="http://ex01/public/abcdf.doc?attach=1" TARGET="_blank" ><FONT color="#000000">附件1.doc(37KB)</FONT></A>
aPattern:= '<A\s+href\s*=\s*""{0}([^>].*?)\?attach=1""{0}\s*TARGET\s*=\s*""{0}_blank""{0}\s*>\s*<FONT\s+color\s*=\s*""{0}#000000""{0}>(.*?)\(([\d]+)KB\)\s*</FONT>\s*</A>';

GetLinkFromHtml(pageText,aPattern,aList); //使用正则表达式,匹配网页内容。
end;


//读取网页源码,从网页中得到文件的链接地址以及文件名称等内容。
//返回参数:HrefList。
procedure GetLinkList(EFileLink,Domain,UserName,PassWD:string; var HrefList:TStringList);
var aIdHTTP:TIdHTTP;
WebHTTPContent:String;
begin
aIdHTTP:=TIdHTTP.Create(nil);

try
aIdHTTP.Request.BasicAuthentication:=True; //设置权限
aIdHTTP.Request.Username:=Domain+'\'+UserName;
aIdHTTP.Request.Password:=PassWD;

//识别浏览器
aIdHTTP.Request.UserAgent:='Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)';
aIdHTTP.Request.Accept:='image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*';
aIdHTTP.Request.ContentType:='text/xml; charset=''UTF-8''';

aIdHTTP.Request.Connection:='Keep-Alive';
aIdHTTP.Request.Method:=(hmGet);//设置Request的方法

//得到网页的内容(以OWA方式可打开)
//EFileLink:='http://ex01/public/工作流程/关于调整设备类型的通知.EML';
WebHTTPContent:=aIdHTTP.Get(EFileLink);

//UTF8解码
WebHTTPContent:=Utf8Decode(WebHTTPContent);

//解析网页源码
ParsePageContent(WebHTTPContent, HrefList);
finally
FreeAndNil(aIdHTTP);
end;
end;

By JRQ

2007.05.28于石

分享到:
评论

相关推荐

    DelphiXE + idHttp和HttpServer + 当客户端与服务器作数据传输的实例+(源码+测试可用)

    首先,我们来看idHttp组件。idHttp是Indy库中用于HTTP通信的组件,它提供了一种简单的方式来发起HTTP请求,如GET、POST等,能够轻松地从Web服务器获取资源。在DelphiXE中,我们可以直接在界面上拖放idHttp组件,并...

    Delphi的rest与idhttp的post提交+源码+测试可用

    IDHTTP组件允许开发者自定义请求头、cookies、代理设置等,以满足各种网络通信需求。 在Delphi中,使用IDHTTP组件进行POST请求时,通常涉及以下几个步骤: 1. 创建IDHTTP实例:首先,在代码中创建一个TIdHTTP对象...

    Indy10.6和OpenSSL解决D7下GET&POST;乱码下载

    在Delphi 7 (D7)到XE6的版本中,开发者可能会遇到使用Indy10.6进行网络通信时中文乱码的问题。这个问题主要涉及到字符编码的处理,特别是当发送或接收包含中文字符的数据时。 首先,让我们来看看"libeay32.dll"和...

    idhttp六种post方法

    本示例聚焦于Delphi7环境下使用Indy库中的IDHTTP组件实现六种不同的POST方法。IDHTTP是Indy提供的一款强大的HTTP客户端组件,它允许开发者发送各种HTTP请求,包括GET、POST等。 首先,我们来详细解释POST方法。POST...

    delphi操作IdHTTP报头读写

    在Delphi中,IdHTTP组件提供了便捷的方法来设置和获取这些报头字段。 设置HTTP请求报头: 1. 创建IdHTTP组件:在Delphi的Form设计界面或代码中,首先创建一个TIdHTTP对象,例如: ```delphi var IdHTTP: TIdHTTP;...

    利用IDHTTP多次获取网页代码

    本篇文章将深入探讨如何利用`IDHTTP`来多次获取网页代码,并针对可能出现的问题提供解决方案。 首先,`IDHTTP`是Indy库中的一个组件,它提供了对HTTP协议的支持,允许开发者发送各种HTTP请求(如GET、POST等)并...

    delphi idhttp 循环 Post

    下面将详细解释如何使用Delphi的IDHTTP组件进行循环POST操作。 首先,我们需要了解IDHTTP组件的基本用法。在Delphi中,打开一个新的VCL Forms应用程序,然后从Tool Palette的Internet类别中拖一个IDHTTP组件到Form...

    使用IdHttp下载文件并显示下载进度条

    使用IdHttp下载文件并显示下载进度条,下载进度采取windows消息通知的方式来显示

    delphi 7 idhttp post 的8种使用方法(含源码)

    本教程将详细阐述IDHTTP组件进行POST请求的8种不同方法,每种方法都有其特定的用途和适用场景。下面,我们将逐一介绍这些方法,并提供源码示例。 1. **基本POST请求** 最简单的POST请求可以通过设置IDHTTP的...

    Idhttp SSl 网站

    标题中的“Idhttp SSL 网站”指的是在Delphi编程环境中使用Indy库的IDHTTP组件进行HTTPS(SSL/TLS)通信时遇到的问题。IDHTTP是Delphi中用于发送HTTP请求的组件,而SSL(Secure Socket Layer)或其升级版TLS...

    delphi 7 idhttp post 的8种使用方法

    本文将深入探讨IDHTTP组件在POST请求中的8种使用方法,帮助开发者更好地理解和利用这个强大的工具。 1. **基本POST请求** IDHTTP组件最简单的POST请求可以通过设置其 `Method` 属性为 `htPost`,然后调用 `Execute...

    delphi +aps idhttp上传文件

    本知识点主要探讨如何使用Delphi结合APS IDHTTP组件来实现文件上传。 1. **IDHTTP组件介绍**: IDHTTP是Indy库的核心组件,它提供了完整的HTTP客户端功能,包括GET、POST、PUT等请求方法。在Delphi中,你可以通过...

    使用delphi XE的IdHTTP控件POST的例子

    在这个例子中,我们将深入探讨如何利用`IdHTTP`进行POST请求,以及这个过程中的关键知识点。 首先,我们需要在表单上放置一个`TIdHTTP`组件和一个`TIdTCPClient`组件。`TIdHTTP`是负责执行HTTP请求的,而`...

    idhttp 使用代理访问

    描述中的 "idhttp 使用代理访问20100303" 提到日期可能是指一个特定的更新或教程,但没有具体细节。因此,我们将重点放在如何在 Delphi 中配置 idHTTP 组件来使用代理服务器。 **知识点一:Indy 和 idHTTP 组件** ...

    IdHTTP应用实例

    1. **添加IdHTTP组件**:首先,在Delphi的Form设计器中,从“Internet”类别中拖放一个IdHTTP组件到表单上。这会将该组件添加到你的工程中,使你可以通过代码访问它的属性和方法。 2. **配置IdHTTP**:设置IdHTTP的...

    IDHTTP断点下载,类似迅雷断点下载

    在这里,我们将深入探讨如何使用IDHTTP组件实现类似迅雷的断点下载功能。 首先,了解IDHTTP组件。IDHTTP是Indy库的一部分,提供了HTTP协议的基本操作,如发送GET和POST请求,处理响应,以及下载和上传文件。要实现...

    简单的idhttp多线程下载演示

    本项目标题为"简单的idhttp多线程下载演示",它利用了 Indy 的 IDHTTP 组件来实现这一功能。IDHTTP 是 Delphi 中内置的 HTTP 客户端组件,提供了丰富的网络请求能力,包括文件下载。 首先,让我们详细了解一下...

    Idhttp get方法演示

    IdHTTP: TIdHTTP; Response: string; begin IdHTTP := TIdHTTP.Create(nil); try Response := IdHTTP.Get('http://example.com'); // 处理返回的Response数据 finally IdHTTP.Free; end; end; ``` 3. `...

    IdHTTP1postget下载.rar

    在"IdHTTP1postget下载.rar"这个压缩包文件中,我们很显然关注的是如何使用`IdHTTP`组件执行POST和GET请求来实现文件的下载。 GET和POST是HTTP协议中最常见的两种方法。GET用于获取服务器上的资源,而POST则常用于...

    Delphi使用IdHTTP控件操作Cookies的例子.rar

    本示例将详细介绍如何在Delphi中利用IdHTTP控件进行Cookie操作。 首先,我们需要了解IdHTTP控件的基本用法。在Delphi中, Indy 是一个流行的网络通信库,IdHTTP是Indy库中的一个组件,它提供了一个简单的方式来发送...

Global site tag (gtag.js) - Google Analytics