一个 HTTP URL 解析和编码的辅助实现

首先,一个 HTTP 的 URL 有下面几个部分组成:

  • 协议类型。是 HTTP 还是 HTTPS 协议,分别对应于 http:// 和 https://;
  • 用户名和密码。这个位于协议类型的后面,用户名和密码之间采用 “:” 进行分隔,跟主机的域名或IP部分用 ‘@’ 符号进行分隔;
  • 域名或IP地址;
  • 要访问的资源地址(URI),以 “/” 开始;
  • 附加的额外参数,与 URI 之间以 “?” 进行分隔,多个参数之前用 “&” 进行分隔。每个参数如果分成名称和参数部分,则名称和参数部分采用 “=” 分隔

一个典型的 URL 如下所示 :

http://www.baidu.com/s?wd=abcd&tag=qdac

分别对应下:协议为 HTTP ,用户名和密码没有,域名为 www.baidu.com,URI 为 /s ,参数有两个,分别为 wd 和 tag,它们的值分别为 abcd 和 qdac。

根据上面的规则,我们定义了一个下面的结构:

只所以用记录(结构体)而不是类,是因为它可以在栈上运行,可以简化编码。

上面的定义实现了几个函数:

  • Encode 函数用于将各个部分组合成一个有效的 URL ;
  • Decode 函数用于解析一个 URL ,并将其各部分的值,保存到相应的成员中;
  • Escape 函数用于将一个字符串按照 URL 编码规则进行转义,主要用于中文和特殊字符的处理;
  • Unescape 函数用于将一个使用 URL 编码规则的字符串反转为正常的字符串,注意这个字符串应该是转义过的字符串,否则可能出现乱码

好了,下面看具体的实现:

当然了,这个代码引用了 QString.pas 中的几个函数,所以你要用的话,一样需要引入 QString 单元。

至于疗效嘛,暂略吧。套用一句话,谁用谁知道!

 

 

分享到:

0 条评论

沙发空缺中,还不快抢~