2012-01-05 5 views
5

Ho un URL di base e alcuni URI relativi in ​​quel documento che voglio avere il percorso assoluto di.URL assoluto dal percorso relativo

E.g. base = https://example.com/some/path.html?query=string e relativi URI in quel documento:

In Java si ha la class URL realizzare che:

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

Ma stranamente non riesco a trovare una libreria C pianura o la funzione realizzare proprio questo.

Esiste una libreria che prova tale funzionalità? O meglio ancora qualche piccolo file autosufficiente che si può usare?

+0

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

risposta

2

Si può scommettere che questo è già stato scritto migliaia di volte in C. Per apache, per esempio.

Ecco alcune indicazioni:

libsoup, la biblioteca http usato da GNOME: http://developer.gnome.org/libsoup/unstable/SoupURI.html#soup-uri-new-with-base

proposto per le librerie Boost:

da Google se stessi (parte di Chrome?): http://code.google.com/p/google-url/

Ancora un altro: http://uriparser.sourceforge.net/

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

analisi degli URL in libcamel: http://www.google.com/codesearch#KhbZeNk3OGk/camel/camel-url.c

Alcuni più URI API di analisi, che tutti sembrano non hanno URI relativi:

GLib, la mia libreria C preferito: http://developer.gnome.org/glib/unstable/glib-URI-Functions.html

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

GNet, un componente aggiuntivo: http://developer.gnome.org/gnet/stable/gnet-uri.html

+3

2 su 3 sono nella lingua sbagliata –

+0

Difficile trovare le librerie anche se sono stati "scritti mille volte in C già", non è vero?HTParse e uriparser sembrano buoni, le altre librerie sono C++ o (libcamel) hanno un inferno di dipendenze. Lo esaminerò più avanti in seguito. Grazie! – kay

+0

Infatti. Ma riutilizzare codice C estraneo è spesso anche più difficile di una semplice scrittura di questo frammento. Il loro modo di gestire la memoria potrebbe non trovare il modo di farlo, sfortunatamente. Le differenze di stile del codice in C sono molto più severe rispetto ad es. Giava. Sono stato sorpreso di vedere solo funzioni URI piuttosto rudimentali, in lob, btw. –