Je suis en train d'écrire un petit robot d'exploration du web, et beaucoup de liens sur les sites que j'explore sont relatifs (donc ils sont /robots.txt
par exemple). Comment puis-je convertir ces URL relatifs en URL absolus (donc /robots.txt
=> http://google.com/robots.txt
) ? Est-ce que Go a un moyen intégré de faire cela ?
Réponses
Trop de publicités?Oui, la bibliothèque standard peut le faire avec la fonction net/url
paquet. Exemple (de la bibliothèque standard) :
package main
import (
"fmt"
"log"
"net/url"
)
func main() {
u, err := url.Parse("../../..//search?q=dotnet")
if err != nil {
log.Fatal(err)
}
base, err := url.Parse("http://example.com/directory/")
if err != nil {
log.Fatal(err)
}
fmt.Println(base.ResolveReference(u))
}
Remarquez que vous ne devez analyser l'URL absolue qu'une seule fois et que vous pouvez la réutiliser à l'infini.
Kanan Rahimov
Points
667
En plus de la solution de @Not_a_Golfer.
Vous pouvez également utiliser base
URL Parse
pour fournir une URL relative ou absolue.
package main
import (
"fmt"
"log"
"net/url"
)
func main() {
// parse only base url
base, err := url.Parse("http://example.com/directory/")
if err != nil {
log.Fatal(err)
}
// and then use it to parse relative URLs
u, err := base.Parse("../../..//search?q=dotnet")
if err != nil {
log.Fatal(err)
}
fmt.Println(u.String())
}
Essayez-le Go Playground .