Функция url.ParseRequestURI
Функция url.ParseRequestURI разбирает переданную строку URI на компоненты и возвращает структуру url.URL. В отличие от функции url.Parse, эта функция более строгая и требует, чтобы строка соответствовала синтаксису абсолютного URI или URL с схемой. В первый параметр функция принимает строку URI для разбора. Если разбор невозможен, функция возвращает ошибку.
Синтаксис
url.ParseRequestURI(rawURI)
Пример
Давайте разберем строку URI на компоненты и выведем полученную структуру:
package main
import (
"fmt"
"net/url"
)
func main() {
res, err := url.ParseRequestURI("https://example.com/path?query=1#fragment")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(res)
}
Результат выполнения кода:
"https://example.com/path?query=1#fragment"
Пример
Разберем URI и получим доступ к отдельным компонентам, таким как схема, хост, путь и параметры запроса:
package main
import (
"fmt"
"net/url"
)
func main() {
res, err := url.ParseRequestURI("https://user:pass@example.com:8080/path/to/resource?key=value&key2=value2")
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Scheme:", res.Scheme)
fmt.Println("Host:", res.Host)
fmt.Println("Path:", res.Path)
fmt.Println("User:", res.User)
fmt.Println("RawQuery:", res.RawQuery)
}
Результат выполнения кода:
"Scheme: https"
"Host: example.com:8080"
"Path: /path/to/resource"
"User: user:pass"
"RawQuery: key=value&key2=value2"
Пример
Попробуем разобрать строку без схемы. В этом случае функция вернет ошибку:
package main
import (
"fmt"
"net/url"
)
func main() {
res, err := url.ParseRequestURI("example.com/path")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(res)
}
Результат выполнения кода:
"parse \"example.com/path\": invalid URI for request"
Пример
Разберем URI с параметрами запроса и получим их значения с помощью метода Query:
package main
import (
"fmt"
"net/url"
)
func main() {
res, err := url.ParseRequestURI("https://example.com/search?q=golang&page=2&sort=asc")
if err != nil {
fmt.Println(err)
return
}
params := res.Query()
fmt.Println(params.Get("q"))
fmt.Println(params.Get("page"))
fmt.Println(params.Get("sort"))
}
Результат выполнения кода:
"golang"
"2"
"asc"
Смотрите также
-
функцию
url.Parse,
которая разбирает URL с более мягкими требованиями к синтаксису -
функцию
url.QueryEscape,
которая экранирует строку для использования в параметрах запроса -
функцию
url.QueryUnescape,
которая декодирует экранированную строку параметров запроса -
метод
url.URL.String,
который преобразует структуру URL обратно в строку