【问题标题】:Absolute URL from relative path来自相对路径的绝对 URL
【发布时间】:2012-02-03 17:00:59
【问题描述】:

我在该文档中有一个基本 URL 和一些相对 URI,我想拥有其绝对路径。

例如base = https://example.com/some/path.html?query=string 和该文档中的相关 URI:

在 Java 中,您可以使用 class URL 来实现:

URL abs = new URL(new URL(basePath), relPath);

但奇怪的是,我找不到一个简单的 C 库或函数来实现这一点。

是否有图书馆证明该功能?或者更好的是一些可以使用的小型独立文件?

【问题讨论】:

标签: c uri relative-url


【解决方案1】:

对于 Windows,您可以使用 Urlmon.dll 中的 CoInternetCombineUrl 或 Shlwapi.lib 中的 UrlCombine。他们做同样的 AFAIK。

【讨论】:

    【解决方案2】:

    您可以打赌,这已经用 C 语言编写了一千次了。以 Apache 为例。

    这里有一些提示:

    libSoup,GNOME 使用的 http 库:http://developer.gnome.org/libsoup/unstable/SoupURI.html#soup-uri-new-with-base

    建议用于 Boost 库:http://cpp-netlib.github.com/

    Google 自己(Chrome 的一部分?):http://code.google.com/p/google-url/

    还有一个:http://uriparser.sourceforge.net/

    W3C:http://www.w3.org/Library/src/HTParse

    libcamel 中的 URL 解析:http://www.google.com/codesearch#KhbZeNk3OGk/camel/camel-url.c

    更多的 URI 解析 API,似乎都没有有相对的 URI:

    GLib,我最喜欢的 C 库:http://developer.gnome.org/glib/unstable/glib-URI-Functions.html

    libedataserver(来自 Evolution) http://developer.gnome.org/libedataserver/stable/libedataserver-e-url.html

    GNet,一个 glib 插件:http://developer.gnome.org/gnet/stable/gnet-uri.html

    【讨论】:

    • 很难找到库,尽管它们“已经用 C 语言编写了一千次”,不是吗? HTParse 和 uriparser 看起来不错,其他库要么是 C++,要么 (libcamel) 有很多依赖。我稍后会进一步研究。谢谢!
    • 确实如此。但是重用国外的C代码往往也比自己写这样一个sn-p还要难。不幸的是,他们处理记忆的方式可能只是找不到你这样做的方式。 C 中的代码风格差异比例如在 C 中要严重得多。爪哇。顺便说一句,在 glib 中看到相当基本的 URI 函数,我很惊讶。
    • 我会选择 libsoup,它维护得很好。上面的链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 2011-11-15
    • 1970-01-01
    • 2018-09-30
    • 2012-01-11
    相关资源
    最近更新 更多