浏览 2394 次
锁定老帖子 主题:TSE开源搜索引擎源码分析-定义URL类
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-18
最后修改:2010-01-19
TSE程序首先必须要做的一件事情是根据一个给定的URL,组成消息体,发送给该URL指向的服务器。为此,定义Url类。 下面是URL类的定义,对应文件Url.h。
enum url_scheme{ SCHEME_HTTP, SCHEME_FTP, SCHEME_INVALID }; class CUrl { public: string m_sUrl; // URL字串 enum url_scheme m_eScheme; // 协议名 string m_sHost; // 主机名 int m_nPort; // 端口号 string m_sPath; // 请求资源 public: CUrl(); ~CUrl(); bool ParseUrl( string strUrl ); private: void ParseScheme ( const char *url ); }; URL可以是HTTP,FTP等协议开始的字符串,TSE主要是针对HTTP协议,为了不失一般性,在url_scheme中定义了SCHEME_HTTP,SCHEME_FTP,SCHEME_INVALID,分别对应HTTP协议,FTP协议和其他协议。一个URL由6个部分组成: <scheme>://<net_loc>/<path>;<params>?<query>#<fragment> 除了scheme部分,其他部分可以不在URL中同时出现。 Scheme 表示协议名称,对应于URL类中的m_eScheme. Net_loc 表示网络位置,包括主机名和端口号,对应于URL类中的m_sHost和m_nPort. 下面四个部分对应于URL类中的m_sPath. Path 表示URL 路径.
Params 表示对象参数. Query 表示查询信息,也经常记为request. Fragment 表示片断标识. 为了程序的简化,URL类的实现主要是解析出net_loc部分,用于组成消息体,发送给服务器。 其中void CUrl::ParseUrlEx(const char *url, char *protocol, intlprotocol, char *host, int lhost, char *request, int lrequest, int*port)执行具体的字符串匹配找出协议名,主机名,请求信息和端口号,找到后赋给Url类的成员变量保存。在URL类中还有些是TSE抓取过程中的细节函数,如char*CUrl::GetIpByHost(const char *host),CUrl::IsValidHost(const char*host),bool CUrl::IsVisitedUrl(const char*url)等,此处就不一一介绍了。读者可以通过阅读TSE的代码获得这部分的具体实现。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |