Αναγνώστες σαν εσάς βοηθούν στην υποστήριξη του MUO. Όταν κάνετε μια αγορά χρησιμοποιώντας συνδέσμους στον ιστότοπό μας, ενδέχεται να κερδίσουμε μια προμήθεια θυγατρικών. Διαβάστε περισσότερα.

Οι διευθύνσεις URL (Uniform Resource Locators) είναι ένα από τα πιο κρίσιμα κομμάτια υποδομής του Διαδικτύου. Καθώς δημιουργείτε εφαρμογές Ιστού, θα χρειαστεί να χειριστείτε τις διευθύνσεις URL για να εντοπίσετε και να ανακτήσετε πόρους.

Όταν δημιουργείτε πιο εξελιγμένες εφαρμογές ιστού, θα πρέπει να εργαστείτε με διευθύνσεις URL σε πιο λεπτομερές επίπεδο. Ίσως χρειαστεί να προσδιορίσετε τις παραμέτρους σχήματος, ονόματος κεντρικού υπολογιστή, διαδρομής και ερωτήματος. Θα πρέπει επίσης να ξέρετε πώς να κωδικοποιείτε και να αποκωδικοποιείτε διευθύνσεις URL, ώστε να μπορείτε να χειρίζεστε ειδικούς χαρακτήρες και να διατηρείτε την εφαρμογή Ιστού ασφαλή.

Η τυπική βιβλιοθήκη της Go παρέχει το πακέτο net/url για το χειρισμό διευθύνσεων URL και στοιχείων URL.

Το πακέτο URL

ο url Το πακέτο παρέχει ολοκληρωμένες λειτουργίες και δυνατότητες για εργασία

instagram viewer
URL και τα ξεχωριστά μέρη τους. Παρέχει λειτουργίες για ανάλυση, κατασκευή, κωδικοποίηση και αποκωδικοποίηση διευθύνσεων URL, καθιστώντας το πακέτο χρήσιμο για την ανάπτυξη ιστού.

Μερικά από τα βασικά χαρακτηριστικά του url πακέτο είναι η δυνατότητα ανάλυσης διευθύνσεων URL σε μεμονωμένα στοιχεία για χειρισμό και κατασκευή διεύθυνσης URL για αιτήματα HTTP. ο url Το πακέτο παρέχει επίσης α URL κατασκευάζω με α Αναλύω λέξη μέθοδος ανάλυσης συμβολοσειρών σε URL.

Εδώ είναι το url. URL μοντέλο κατασκευής:

πακέτο κύριος

τύπος URL struct {
// Scheme είναι το σχήμα πρωτοκόλλου της διεύθυνσης URL,
// όπως "http" ή "https"
Σχέδιο σειρά

// Το αδιαφανές χρησιμοποιείται για τη διατήρηση τυχόν αδιαφανών δεδομένων
// που θα πρέπει να κωδικοποιηθεί στη διεύθυνση URL
Αδιαφανής σειρά

// Ο χρήστης διατηρεί πληροφορίες σχετικά με τον χρήστη που υποβάλλει το αίτημα,
// όπως όνομα χρήστη και κωδικός πρόσβασης
Χρήστης *Στοιχεία χρήστη

// Host είναι το όνομα κεντρικού υπολογιστή ή η διεύθυνση IP
// του διακομιστή που φιλοξενεί τη διεύθυνση URL
Πλήθος σειρά

// Η διαδρομή είναι η διαδρομή της διεύθυνσης URL στον διακομιστή
Μονοπάτι σειρά

// Το RawPath είναι το πρωτότυπο,
// κωδικοποιημένη διαδρομή του URL
RawPath σειρά

// Το ForceQuery υποδεικνύει εάν η διεύθυνση URL πρέπει να περιλαμβάνει μια συμβολοσειρά ερωτήματος
// ακόμα κι αν είναι κενό
ForceQuery bool

// Το RawQuery είναι το πρωτότυπο,
//κωδικοποιημένη συμβολοσειρά ερωτήματος της διεύθυνσης URL
RawQuery σειρά

// Το Fragment είναι το αναγνωριστικό τμήματος της διεύθυνσης URL,
// χρησιμοποιείται για τη σύνδεση με ένα συγκεκριμένο στοιχείο σε μια σελίδα
Θραύσμα σειρά

// Το RawFragment είναι το πρωτότυπο,
// κωδικοποιημένο αναγνωριστικό τμήματος της διεύθυνσης URL
RawFragment σειρά
}

Γνωρίζοντας πώς να έχετε πρόσβαση σε διάφορα μέρη του URL Το struct μπορεί να είναι χρήσιμο για εργασίες όπως η επικύρωση.

Ανάλυση διευθύνσεων URL με χρήση της συνάρτησης ανάλυσης

ο Αναλύω λέξη λειτουργία του url Το πακέτο παρέχει τη λειτουργικότητα για την ανάλυση συμβολοσειρών URL σε μεμονωμένα στοιχεία. ο Αναλύω λέξη Η συνάρτηση παίρνει ένα μόνο URL ως όρισμα και επιστρέφει έναν δείκτη στο url. URL struct που περιέχει τα αναλυμένα δεδομένα της διεύθυνσης URL και έναν τύπο σφάλματος.

Δείτε πώς μπορείτε να χρησιμοποιήσετε το Αναλύω λέξη λειτουργία για την ανάκτηση των στοιχείων μιας διεύθυνσης URL.

εισαγωγή (
"fmt"
"net/url"
)

funcκύριος() {
// Η διεύθυνση URL που θέλετε να αναλύσετε
exampleURL := " https://www.example.com/path? param1=value1&param2=value2"

// Αναλύστε τη διεύθυνση URL
parsedURL, err := url. Ανάλυση (exampleURL)

αν λάθος!= μηδέν {
fmt. Println (λάθος)
ΕΠΙΣΤΡΟΦΗ
}

// Εκτυπώστε όλα τα πεδία της διεύθυνσης URL
fmt. Println("Σχέδιο:", parsedURL.Scheme)
fmt. Println("Αδιαφανής:", parsedURL.Opaque)
fmt. Println("Χρήστης:", parsedURL.User)
fmt. Println("Πλήθος:", parsedURL.Host)
fmt. Println("Μονοπάτι:", parsedURL.Path)
fmt. Println("RawPath:", parsedURL.RawPath)
fmt. Println("ForceQuery:", parsedURL.ForceQuery)
fmt. Println("RawQuery:", parsedURL.RawQuery)
fmt. Println("Θραύσμα:", parsedURL.Fragment)
fmt. Println("RawFragment:", parsedURL.RawFragment)
}

ο exampleURL μεταβλητή κρατά την πλήρη, μη αναλυμένη διεύθυνση URL και το Αναλύω λέξη η συνάρτηση αναλύει το περιεχόμενο του exampleURL μεταβλητή και επιστρέφει το αναλυμένο URL. Το πρόγραμμα τελειώνει με μια σειρά κλήσεων προς Println για την επίδειξη των επιμέρους πεδίων του URL struct.

Η συνάρτηση ανάλυσης δεν ελέγχει εάν μια διεύθυνση URL είναι πραγματική που υπάρχει στην πραγματικότητα, αναλύει μόνο τη διεύθυνση URL συντακτικά. Μπορείτε να χρησιμοποιήσετε το http πακέτο για να κάνετε ένα αίτημα GET στη διεύθυνση URL και να ελέγξετε την απάντηση:

εισαγωγή (
"fmt"
"net/http"
)

funcκύριος() {
// Η διεύθυνση URL που θέλετε να ελέγξετε
exampleURL := " https://www.example.com"

// Κάντε ένα αίτημα HTTP GET στη διεύθυνση URL
απάντηση, λάθος := http. Λήψη (exampleURL)

αν λάθος!= μηδέν {
fmt. Println (λάθος)
ΕΠΙΣΤΡΟΦΗ
}

αναβάλλω απάντηση. Σώμα. Κλείσε()

// Ελέγξτε τον κωδικό κατάστασης απόκρισης
αν απάντηση. StatusCode == http. ΚατάστασηΟΚ {
fmt. Println("Η διεύθυνση URL υπάρχει.")
} αλλού {
fmt. Println("Η διεύθυνση URL δεν υπάρχει.")
}
}

ο κύριος συνάρτηση κάνει α ΠΑΙΡΝΩ αίτημα προς το exampleURL χρησιμοποιώντας την Παίρνω λειτουργία του http πακέτο. Αυτή η συνάρτηση επιστρέφει μια παρουσία απόκρισης και έναν τύπο σφάλματος. Το πρόγραμμα τελειώνει με ένα αν δήλωση για την επικύρωση της ύπαρξης του ιστότοπου ελέγχοντας το Κωδικός κατάστασης HTTP ενάντια σε StatusOk σταθερά από το http πακέτο.

Αυτή η προσέγγιση σάς επιτρέπει να προβείτε σε ενέργειες με βάση το αποτέλεσμα του ελέγχου, όπως η ανακατεύθυνση του χρήστη σε διαφορετική σελίδα, εμφανίζοντας ένα μήνυμα σφάλματος ή δοκιμάζοντας ξανά το αίτημα μετά από ένα ορισμένο περίοδος.

Κωδικοποίηση και αποκωδικοποίηση παραμέτρων URL

ο url πακέτο παρέχει το Κωδικοποίηση μέθοδος για την κωδικοποίηση παραμέτρων URL. ο Κωδικοποίηση συνάρτηση ποσοστό-κωδικοποιεί ειδικούς χαρακτήρες και κενά στις παραμέτρους URL.

εισαγωγή (
"fmt"
"net/url"
)

funcκύριος() {
// δημιουργήστε μια νέα διεύθυνση url. Οι αξίες δομούνται
params := url. Αξίες{}

// προσθέστε τιμές στη δομή
παραμέτρους. Προσθήκη("όνομα", "Τζον Σμιθ")
παραμέτρους. Προσθήκη("ηλικία", "30")
παραμέτρους. Προσθήκη("γένος", "αρσενικός")

// κωδικοποιεί τη δομή σε μια συμβολοσειρά
encodedParams := params. Encode()
fmt. Println (encodedParams)

// Έξοδος: "age=30&gender=male&name=John+Smith"
}

ο κύριος η λειτουργία δημιουργεί ένα νέο Αξίες struct παράδειγμα του url πακέτο, και το Προσθήκη Η μέθοδος της παρουσίας δομής προσθέτει ζεύγη δεδομένων κλειδιού-τιμής στην παρουσία δομής.

ο Κωδικοποίηση Η μέθοδος μετατρέπει το ζεύγος κλειδιού-τιμής στη μορφή συμβολοσειράς URL "key1=value1&key2=value2&key3=value3".

Μπορείτε να αποκωδικοποιήσετε μια κωδικοποιημένη συμβολοσειρά URL με το ParseQuery λειτουργία του url πακέτο.

εισαγωγή (
"fmt"
"net/url"
)

funcκύριος() {
// κωδικοποιημένη συμβολοσειρά παραμέτρων URL
encodedParams := "ηλικία=30&φύλο=άνδρας&όνομα=Τζον+Σμιθ"

// αναλύστε την κωδικοποιημένη συμβολοσειρά σε μια διεύθυνση url. Οι αξίες δομούνται
params, err := url. ParseQuery (encodedParams)

αν λάθος!= μηδέν {
fmt. Println (λάθος)
}

// εκτυπώστε τη δομή
fmt. Println (παραμέτρους)

// Έξοδος: χάρτης[ηλικία:[30] φύλο:[άνδρας] όνομα:[John Smith]]
}

ο encodedParameter Η μεταβλητή είναι μια κωδικοποιημένη συμβολοσειρά URL. ο ParseQuery η λειτουργία αναλαμβάνει το encodedParameter μεταβλητή και επιστρέφει την αποκωδικοποιημένη συμβολοσειρά URL και ένα σφάλμα.

Αυτά τα πακέτα Go μπορούν να ανεβάσουν το παιχνίδι δρομολόγησης Ιστού σας στο επόμενο επίπεδο

Οι διευθύνσεις URL που χρησιμοποιείτε για τις σελίδες της διαδικτυακής εφαρμογής σας συμβάλλουν στην απόδοση και την ορατότητά της στις μηχανές αναζήτησης. Η δρομολόγηση Ιστού είναι η διαδικασία κατεύθυνσης των εισερχόμενων αιτημάτων στην κατάλληλη λειτουργία χειριστή με βάση τη διεύθυνση URL.

Μπορείτε να δρομολογήσετε χρησιμοποιώντας το πακέτο http ή δημοφιλή πακέτα τρίτων όπως Gorilla Mux, Chi, Pat ή Httprouter. Αυτά τα πακέτα κάνουν τη δρομολόγηση ευκολότερη από το πακέτο http αφαιρώντας μερικές από τις πολυπλοκότητες του.