URL absolue du chemin relatif

J’ai un URL de base et quelques URI relatifs dans ce document dont je veux avoir le chemin absolu.

Par exemple, base = https://example.com/some/path.html?query=ssortingng et les URI relatifs dans ce document:

  • index.html → https://example.com/some/index.html
  • .. → https://example.com/
  • ../../../../abc → https://example.com/abc
  • abc / .. → https://example.com/some/
  • //exemple.org/ → https://exemple.org/
  • ftp://example.net/ → ftp://example.net/

En Java, vous avez la classe URL accomplissant cela:

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

Mais étrangement, je ne trouve pas de bibliothèque ou de fonction C simple qui réalise cela.

Existe-t-il une bibliothèque prouvant cette fonctionnalité? Ou mieux encore, un petit fichier autonome que vous pouvez utiliser?

Vous pouvez parier que cela a déjà été écrit mille fois en C Pour Apache, par exemple.

Voici quelques indications:

libSoup, la bibliothèque http utilisée par GNOME: http://developer.gnome.org/libsoup/unstable/SoupURI.html#soup-uri-new-with-base

Proposé pour les bibliothèques Boost: http://cpp-netlib.github.com/

Par Google eux-mêmes (une partie de Chrome?): http://code.google.com/p/google-url/

Encore un autre: http://uriparser.sourceforge.net/

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

Analyse des URL dans libcamel: http://www.google.com/codesearch#KhbZeNk3OGk/camel/camel-url.c

Quelques autres API d’parsing d’URI, qui semblent toutes ne pas avoir d’URI relatifs:

GLib, ma bibliothèque C préférée: http://developer.gnome.org/glib/unstable/glib-URI-Functions.html

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

GNet, un addon glib: http://developer.gnome.org/gnet/stable/gnet-uri.html

Pour Windows, vous pouvez utiliser CoInternetCombineUrl à partir de Urlmon.dll ou UrlCombine à partir de Shlwapi.lib. Ils font la même chose, autant que je sache.