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

本文介绍TSE程序中URL类的设计与实现,重点讲解如何解析URL并提取关键信息,如协议名、主机名和端口号等,为后续消息体的组成及服务器通信打下基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的代码获得这部分的具体实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值