2012-01-05 3 views
5

J'ai une URL de base et des URI relatives dans ce document dont je veux avoir le chemin absolu.URL absolue du chemin relatif

E.g. base = https://example.com/some/path.html?query=string et URIs relatives dans ce document:

En Java, vous avez la class URL que l'accomplissement:

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

Mais étrangement je ne peux pas trouver une bibliothèque C ordinaire ou fonction de réaliser cela.

Existe-t-il une bibliothèque prouvant cette fonctionnalité? Ou mieux encore un petit fichier autonome que l'on peut utiliser?

+0

consultez http://stackoverflow.com/questions/726122/best-ways-of-parsing-a-url-using-c – frankc

Répondre

2

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

Voici quelques conseils:

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:

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 syntaxique URL dans libcamel: http://www.google.com/codesearch#KhbZeNk3OGk/camel/camel-url.c

Encore quelques URI API analyse syntaxique, que tous semblent pas ont URIs relatives:

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

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

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

+3

2 sur 3 sont dans la mauvaise langue –

+0

Difficile de trouver des bibliothèques bien qu'ils ont été "déjà écrit mille fois en C", n'est-ce pas?HTParse et uriparser semblent sympas, les autres librairies sont en C++ ou (libcamel) ont un enfer de dépendances. Je regarderai plus loin plus tard. Merci! – kay

+0

En effet. Mais réutiliser du code C étranger est souvent plus difficile que de simplement écrire un tel extrait. Leur façon de gérer la mémoire pourrait ne pas trouver votre façon de faire, malheureusement. Les différences de style de code dans C sont beaucoup plus sévères que dans par exemple. Java. J'ai été surpris de voir juste des fonctions URI plutôt rudimentaires, en glib, btw. –