首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ urljoin等效项

C++ urljoin等效项
EN

Stack Overflow用户
提问于 2010-02-18 08:10:43
回答 3查看 788关注 0票数 2

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

urljoin文档:http://docs.python.org/library/urlparse.html

和python示例:

代码语言:javascript
复制
>>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
'http://www.cwi.nl/%7Eguido/FAQ.html'
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-18 13:19:14

我想通了。我使用库uriparser:http://uriparser.sourceforge.net/,并仓促地实现了如下函数。它会执行稀疏错误检查,并且可能会泄漏内存。

代码语言:javascript
复制
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;
}
票数 2
EN

Stack Overflow用户

发布于 2010-02-19 04:48:27

POCO C++ Libraries中的resolve类可以做到这一点(参见resolve()成员函数)。

票数 2
EN

Stack Overflow用户

发布于 2010-02-18 08:29:07

简而言之,不是这样的。

您必须解析字符串并替换尾部。例如,使用boost::regex会相当容易。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2285409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档