Làm việc với URL Sử dụng gói net/url của Go

URL (Bộ định vị tài nguyên thống nhất) là một trong những phần cơ sở hạ tầng quan trọng nhất của Internet. Khi bạn xây dựng các ứng dụng web, bạn sẽ cần thao tác với các URL để định vị và truy xuất tài nguyên.


Khi bạn xây dựng các ứng dụng web phức tạp hơn, bạn sẽ cần phải làm việc với các URL ở cấp độ chi tiết hơn. Bạn có thể cần xác định các tham số lược đồ, tên máy chủ, đường dẫn và truy vấn. Bạn cũng sẽ cần biết cách mã hóa và giải mã URL để có thể xử lý các ký tự đặc biệt và giữ an toàn cho ứng dụng web của mình.

Thư viện chuẩn của Go cung cấp gói net/url để xử lý URL và các thành phần URL.


Gói URL

Các url gói cung cấp các chức năng và tính năng toàn diện để làm việc với các URL và các phần riêng biệt của chúng. Nó cung cấp các chức năng để phân tích cú pháp, xây dựng, mã hóa và giải mã URL, làm cho gói này trở nên hữu ích cho việc phát triển web.

Một số tính năng chính của url gói là khả năng phân tích URL thành các thành phần riêng lẻ để thao tác và xây dựng URL cho các yêu cầu HTTP. Các url gói cũng cung cấp một URL cấu trúc với một phân tích cú pháp phương pháp phân tích chuỗi thành URL.

Đây là url.URL mô hình cấu trúc:

 package main
type URL struct {
    
    
    Scheme string


    
    
    Opaque string


    
    
    User *Userinfo


    
    
    Host string


    
    Path string


    
    
    RawPath string


    
    
    ForceQuery bool


    
    
    RawQuery string


    
    
    Fragment string


    
    
    RawFragment string
}


Biết cách truy cập các phần khác nhau của URL struct có thể hữu ích cho các tác vụ như xác thực.

Phân tích cú pháp URL bằng chức năng phân tích cú pháp

Các phân tích cú pháp chức năng của url gói cung cấp chức năng phân tích chuỗi URL thành các thành phần Riêng lẻ. Các phân tích cú pháp hàm lấy một URL làm đối số và trả về một con trỏ tới url.URL struct chứa dữ liệu được phân tích cú pháp của URL và loại lỗi.

Đây là cách bạn có thể sử dụng phân tích cú pháp để truy xuất các thành phần của một URL.

 import (
    "fmt"
    "net/url"
)
func main() {
    
    exampleURL := "https://www.example.com/path?param1=value1&param2=value2"


    
    parsedURL, err := url.Parse(exampleURL)


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


    
    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)
}


Các ví dụURL biến chứa URL đầy đủ, chưa được phân tích cú pháp và phân tích cú pháp chức năng phân tích nội dung của ví dụURL biến và trả về URL được phân tích cú pháp. Chương trình kết thúc với một loạt các cuộc gọi đến Println để chứng minh các lĩnh vực riêng lẻ của URL cấu trúc.

kết quả của thể hiện cấu trúc url.URL cho URL ví dụ

Chức năng phân tích cú pháp không kiểm tra xem một URL có thực sự tồn tại hay không, nó chỉ phân tích cú pháp URL theo cú pháp. Bạn có thể dùng http gói để thực hiện yêu cầu GET tới URL và kiểm tra phản hồi:

 import (
    "fmt"
    "net/http"
)
func main() {
    
    exampleURL := "https://www.example.com"


    
    response, err := http.Get(exampleURL)


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


    defer response.Body.Close()
    
    
    if response.StatusCode == http.StatusOK {
        fmt.Println("URL exists.")
    } else {
        fmt.Println("URL does not exist.")
    }
}


Các chủ yếu chức năng làm cho một ĐƯỢC yêu cầu các ví dụURL sử dụng Được chức năng của http bưu kiện. Hàm đó trả về một thể hiện phản hồi và loại lỗi. Chương trình kết thúc với một nếu để xác thực sự tồn tại của trang web bằng cách kiểm tra mã trạng thái HTTP so với Trạng tháiOk hằng số từ http bưu kiện.

Cách tiếp cận này cho phép bạn thực hiện các hành động dựa trên kết quả kiểm tra, chẳng hạn như chuyển hướng người dùng đến một trang khác, hiển thị thông báo lỗi hoặc thử lại yêu cầu sau một khoảng thời gian nhất định.

Mã hóa và giải mã tham số URL

Các url gói cung cấp các mã hóa phương pháp mã hóa tham số URL. Các mã hóa chức năng phần trăm mã hóa các ký tự đặc biệt và khoảng trắng trong các tham số URL.

 import (
    "fmt"
    "net/url"
)
func main() {
    
    params := url.Values{}


    
    params.Add("name", "John Smith")
    params.Add("age", "30")
    params.Add("gender", "male")


    
    encodedParams := params.Encode()
    fmt.Println(encodedParams)


    
}


Các chủ yếu chức năng tạo một cái mới giá trị thể hiện cấu trúc của url gói, và Thêm vào phương thức của thể hiện cấu trúc thêm các cặp dữ liệu khóa-giá trị vào thể hiện cấu trúc.

Các mã hóa chuyển đổi cặp khóa-giá trị thành định dạng chuỗi URL “key1=value1&key2=value2&key3=value3”.

Bạn có thể giải mã chuỗi URL được mã hóa bằng ParseQuery chức năng của url bưu kiện.

 import (
    "fmt"
    "net/url"
)
func main() {
    
    encodedParams := "age=30&gender=male&name=John+Smith"


    
    params, err := url.ParseQuery(encodedParams)


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


    
    fmt.Println(params)


    
}

Các tham số được mã hóa biến là một chuỗi URL được mã hóa. Các ParseQuery chức năng nhận trong tham số được mã hóa biến và trả về chuỗi URL đã giải mã và một lỗi.

Các gói Go này có thể đưa trò chơi định tuyến web của bạn lên một tầm cao mới

Các URL bạn sử dụng cho các trang trong ứng dụng web của bạn góp phần vào hiệu suất và khả năng hiển thị của nó trên các công cụ tìm kiếm. Định tuyến web là quá trình hướng các yêu cầu đến chức năng xử lý thích hợp dựa trên URL.

Bạn có thể định tuyến bằng gói http hoặc các gói phổ biến của bên thứ ba như Gorilla Mux, Chi, Pat hoặc Httprouter. Các gói này làm cho việc định tuyến dễ dàng hơn gói http bằng cách loại bỏ một số phức tạp của nó.

Previous Post
Next Post

post written by: