3 votes

Convertir les URL relatives en URL absolues dans Go

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 ?

8voto

Not_a_Golfer Points 8585

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.

2voto

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 .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X