Praca z adresami URL przy użyciu pakietu net/url Go

Praca z adresami URL przy użyciu pakietu net/url Go

Adresy URL (Uniform Resource Locators) to jedne z najważniejszych elementów infrastruktury internetowej. Podczas tworzenia aplikacji internetowych będziesz musiał manipulować adresami URL, aby zlokalizować i pobrać zasoby.

Tworząc bardziej zaawansowane aplikacje internetowe, będziesz musiał pracować z adresami URL na bardziej szczegółowym poziomie. Może być konieczne zidentyfikowanie schematu, nazwy hosta, ścieżki i parametrów zapytania. Musisz także wiedzieć, jak kodować i dekodować adresy URL, aby móc obsługiwać znaki specjalne i zapewnić bezpieczeństwo aplikacji internetowej.

Standardowa biblioteka Go zawiera pakiet net/url do obsługi adresów URL i komponentów adresów URL.

Pakiet URL

Pakiet url zapewnia kompleksowe funkcje i funkcje do pracy z adresami URL i ich oddzielnymi częściami. Zapewnia funkcje do analizowania, konstruowania, kodowania i dekodowania adresów URL, dzięki czemu pakiet jest przydatny do tworzenia stron internetowych.

Niektóre z kluczowych funkcji pakietu url to możliwość parsowania adresów URL na poszczególne komponenty w celu manipulacji i konstruowania adresów URL dla żądań HTTP. Pakiet url zawiera również strukturę adresu URL z metodą Parse do parsowania ciągów znaków na adresy URL.

Oto model struktury url.URL :

package main

type URL struct {
    // Scheme is the protocol scheme of the URL,
    // such as "http"or "https"
    Scheme string

    // Opaque is used to hold any opaque data
    // that should be encoded in the URL
    Opaque string

    // User holds information about the user making the request,
    // such as a username and password
    User *Userinfo

    // Host is the hostname or IP address
    // of the server hosting the URL
    Host string

    // Path is the path of the URL on the server
    Path string

    // RawPath is the original,
    // encoded path of the URL
    RawPath string

    // ForceQuery indicates whether the URL should include a query string
    // even if it is empty
    ForceQuery bool

    // RawQuery is the original,
    //encoded query string of the URL
    RawQuery string

    // Fragment is the fragment identifier of the URL,
    // used for linking to a specific element on a page
    Fragment string

    // RawFragment is the original,
    // encoded fragment identifier of the URL
    RawFragment string
}

Wiedza o tym, jak uzyskać dostęp do różnych części struktury adresu URL , może być przydatna do zadań takich jak walidacja.

Parsowanie adresów URL za pomocą funkcji parsowania

Funkcja Parse pakietu url zapewnia funkcjonalność parsowania ciągów adresów URL na poszczególne komponenty. Funkcja Parse przyjmuje pojedynczy adres URL jako argument i zwraca wskaźnik do struktury url.URL zawierającej przeanalizowane dane adresu URL i typ błędu.

Oto jak możesz użyć funkcji Parse do pobrania elementów adresu URL.

import (
    "fmt"
    "net/url"
)

func main() {
    // The URL you want to parse
    exampleURL: = "https://www.example.com/path?param1=value1&param2=value2"

    // Parse the URL
    parsedURL, err: = url.Parse(exampleURL)

    if err! = nil {
        fmt.Println(err)
        return
    }

    // Print all the fields of the URL
    fmt.Println("Scheme:", parsedURL.Scheme)
    fmt.Println("Opaque:", parsedURL.Opaque)
    fmt.Println("User:", parsedURL.User)
    fmt.Println("Host:", parsedURL.Host)
    fmt.Println("Path:", parsedURL.Path)
    fmt.Println("RawPath:", parsedURL.RawPath)
    fmt.Println("ForceQuery:", parsedURL.ForceQuery)
    fmt.Println("RawQuery:", parsedURL.RawQuery)
    fmt.Println("Fragment:", parsedURL.Fragment)
    fmt.Println("RawFragment:", parsedURL.RawFragment)
}

Zmienna exampleURL zawiera pełny, nieprzeanalizowany adres URL, a funkcja Parse analizuje zawartość zmiennej exampleURL i zwraca przeanalizowany adres URL. Program kończy się serią wywołań Println w celu zademonstrowania poszczególnych pól struktury adresu URL .

wynik wystąpienia struktury url.URL dla przykładowego adresu URL

Funkcja analizowania nie sprawdza, czy adres URL jest prawdziwy, a jedynie analizuje składnię adresu URL. Możesz użyć pakietu http , aby wysłać żądanie GET do adresu URL i sprawdzić odpowiedź:

import (
    "fmt"
    "net/http"
)

func main() {
    // The URL you want to check
    exampleURL: = "https://www.example.com"

    // Make an HTTP GET request to the URL
    response, err: = http.Get(exampleURL)

    if err! = nil {
        fmt.Println(err)
        return
    }

    defer response.Body.Close()

    // Check the response status code
    if response.StatusCode == http.StatusOK {
        fmt.Println("URL exists.")
    } else {
        fmt.Println("URL does not exist.")
    }
}

Funkcja main wysyła żądanie GET do adresu exampleURL za pomocą funkcji Get pakietu http . Ta funkcja zwraca instancję odpowiedzi i typ błędu. Program kończy się instrukcją if w celu potwierdzenia istnienia strony internetowej poprzez sprawdzenie kodu stanu HTTP ze stałą StatusOk z pakietu http .

Takie podejście umożliwia podjęcie działań w oparciu o wynik sprawdzenia, takich jak przekierowanie użytkownika na inną stronę, wyświetlenie komunikatu o błędzie lub ponowienie żądania po pewnym czasie.

Kodowanie i dekodowanie parametrów adresu URL

Pakiet url zapewnia metodę Encode do kodowania parametrów adresu URL. Funkcja Koduj procentowo koduje znaki specjalne i spacje w parametrach adresu URL.

import (
    "fmt"
    "net/url"
)

func main() {
    // create a new url.Values struct
    params: = url.Values{}

    // add values to the struct
    params.Add("name", "John Smith")
    params.Add("age", "30")
    params.Add("gender", "male")

    // encode the struct into a string
    encodedParams: = params.Encode()
    fmt.Println(encodedParams)

    // Output: "age=30&gender=male&name=John+Smith"
}

Funkcja main tworzy nową instancję struktury Values ​​pakietu url , a metoda Add instancji struktury dodaje pary klucz-wartość danych do instancji struktury.

Metoda Encode konwertuje parę klucz-wartość na format ciągu adresu URL „klucz1=wartość1&klucz2=wartość2&klucz3=wartość3”.

Możesz zdekodować zakodowany ciąg adresu URL za pomocą funkcji ParseQuery pakietu url .

import (
    "fmt"
    "net/url"
)

func main() {
    // encoded string of URL parameters
    encodedParams: = "age=30&gender=male&name=John+Smith"

    // parse the encoded string into a url.Values struct
    params, err: = url.ParseQuery(encodedParams)

    if err! = nil {
        fmt.Println(err)
    }

    // print the struct
    fmt.Println(params)

    // Output: map[age:[30] gender:[male] name:[John Smith]]
}

Zmienna encodedParameter jest zakodowanym ciągiem adresu URL. Funkcja ParseQuery przyjmuje zmienną encodedParameter i zwraca zdekodowany ciąg adresu URL oraz błąd.

Te pakiety Go mogą przenieść Twoją grę z routingiem internetowym na wyższy poziom

Adresy URL, których używasz do stron swojej aplikacji internetowej, przyczyniają się do jej wydajności i widoczności w wyszukiwarkach. Routing sieciowy to proces kierowania przychodzących żądań do odpowiedniej funkcji obsługi na podstawie adresu URL.

Możesz kierować za pomocą pakietu http lub popularnych pakietów innych firm, takich jak Gorilla Mux, Chi, Pat lub Httprouter. Pakiety te sprawiają, że routing jest prostszy niż pakiet http, usuwając niektóre z jego złożoności.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *