Python有一个函数urljoin,它接受两个URL并将它们智能地连接起来。是否有一个库在c++中提供类似的功能?

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;
}

关于c++ - C++ urljoin等效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2285409/

10-09 02:55