解析URL是个烦心事,尤其是还要使用C语言来解析。写Java写习惯了,好多C的东西都不太会用了。最近的一次作业中需要用到URL的解析,查找了一番就找到了这个开源库。
http-parser由nodejs项目组开源,具体简介可以去参考主页README。
库的主要功能是解析HTTP头的,而解析URL使用的则是库中的一个函数方法http_parser_parse_url()
:
需要说明的是is_connect参数,当传1时,http_parser_parse_url方法将进行严格检验,如果URL中没有port、schema将导致http_parser_parse_url方法失败,返回非0值。一般给is_connect方法传0即可。
调用函数之后会将解析的port、host、path、schema之类的结果存放到http_parser_url
的结构体中:
结构体未进行任何的内存拷贝,只记录了位置、长度信息等,效率上还是很不错的。目前支持SCHEMA、PORT、HOST、PATH、QUERY、USERINFO、FRAGMENT七种信息的提取。
被解析的URL至少需要包含UF_SCHEMA和UF_HOST,否则在解析的时候会发生错误。
使用的是博客中的示例代码:
这里从头文件中摘出了URL参数的定义,可以在代码中获取到相应的部分: