登 录
_HTTP_URI::_HTTP_URI(string url) { if (url.IsNullOrEmpty()) { return; } int Offset = url.IndexOf(_T("://"));//解析Scheme if (Offset == -1)//不符合 { return; } this->Scheme = _T("HTTP");//目前仅支持http协议 url = url.Substring(Offset + 3).Replace(_T("//"), _T("/")); Offset = url.IndexOf(_T(":"));//解析host if (Offset == -1)//没有指定端口 { this->Port = 80;//使用默认端口 Offset = url.IndexOf(_T("/")); if (Offset == -1)//没有指定路径,连末尾的斜杠也没有 { this->Host = url.ToLower();//将主机名转换为小写 this->PathAndQuery = _T("/"); return;//解析完成 http:// hostname } else { this->Host = url.Substring(0, Offset).ToLower(); this->PathAndQuery = url.Substring(Offset); return;//解析完成 http:// hostname /file?query=... } } else { this->Host = url.Substring(0, Offset).ToLower(); url = url.Substring(Offset + 1);//不要":" Offset = url.IndexOf(_T("/")); if (Offset == -1)//没有末尾的斜杠 { this->Port = atoi(url); this->PathAndQuery = _T("/"); return;//解析完成 http:// hostname:port } else { this->Port = atoi(url.Substring(0, Offset)); this->PathAndQuery = url.Substring(Offset); return;//解析完成 http:// hostname:port /file?query=... } } }
备注:C++解析URL除了第三方库之外,还可以使用ParseURL,该函数定义在Shlwapi.h中,美中不足的是,无法解析出端口.
抱歉!评论已关闭.