Python有一个函数urljoin,它需要两个URL并智能地连接它们。有没有一个库在C++中提供类似的功能?C++ urljoin等效
urljoin文档:http://docs.python.org/library/urlparse.html
和Python例如:
>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
'http://www.cwi.nl/%7Eguido/FAQ.html'
Python有一个函数urljoin,它需要两个URL并智能地连接它们。有没有一个库在C++中提供类似的功能?C++ urljoin等效
urljoin文档:http://docs.python.org/library/urlparse.html
和Python例如:
>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
'http://www.cwi.nl/%7Eguido/FAQ.html'
我想通了。我用库uriparser:http://uriparser.sourceforge.net/并匆匆执行如下功能。它确实稀疏错误检查并可能泄漏内存。
std::string urljoin(std::string &base, std::string &relative)
{
UriParserStateA state;
UriUriA uriOne;
UriUriA uriTwo;
state.uri = &uriOne;
if (uriParseUriA(&state, base.c_str()) != URI_SUCCESS)
{
return "";
}
state.uri = &uriTwo;
if (uriParseUriA(&state, relative.c_str()) != URI_SUCCESS)
{
uriFreeUriMembersA(&uriTwo);
return "";
}
UriUriA result;
if (uriAddBaseUriA(&result, &uriTwo, &uriOne) != URI_SUCCESS)
{
uriFreeUriMembersA(&result);
return "";
}
uriFreeUriMembersA(&uriOne);
uriFreeUriMembersA(&uriTwo);
int charsRequired;
uriToStringCharsRequiredA(&result, &charsRequired);
charsRequired++;
char *buf = (char*) malloc(charsRequired * sizeof(char)); if (uriToStringA(buf, &result, charsRequired, NULL) != URI_SUCCESS)
return "";
uriFreeUriMembersA(&result);
std::string ret(buf);
free(buf);
return ret;
}
简短的回答,不是真的。
您将不得不解析字符串并替换尾部。例如,使用boost :: regex会很容易。
的Poco::URI类的POCO C++ Libraries可以做到这一点(见决心()成员函数)。
并不那么简单。有关如何解析相对URI的完整算法,请参阅RFC 2396第5.2节。 – 2010-02-18 00:40:48
RFC 2396是一个阅读的婊子。 – CarbonAsh 2010-02-18 01:02:06