TSE开源搜索引擎源码分析-定义URL类

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的代码获得这部分的具体实现。

你可能感兴趣的:(.net,搜索引擎,Scheme,网络协议)