Функция url.ParseRequestURI

Функция url.ParseRequestURI разбирает переданную строку URI на компоненты и возвращает структуру url.URL. В отличие от функции url.Parse, эта функция более строгая и требует, чтобы строка соответствовала синтаксису абсолютного URI или URL с схемой. В первый параметр функция принимает строку URI для разбора. Если разбор невозможен, функция возвращает ошибку.

Синтаксис

gourl.ParseRequestURI(rawURI)

Пример

Давайте разберем строку URI на компоненты и выведем полученную структуру:

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

Результат выполнения кода:

go"https://example.com/path?query=1#fragment"

Пример

Разберем URI и получим доступ к отдельным компонентам, таким как схема, хост, путь и параметры запроса:

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

Результат выполнения кода:

go"Scheme: https"
"Host: example.com:8080"
"Path: /path/to/resource"
"User: user:pass"
"RawQuery: key=value&key2=value2"

Пример

Попробуем разобрать строку без схемы. В этом случае функция вернет ошибку:

gopackage main

import (
  "fmt"
  "net/url"
)

func main() {
  res, err := url.ParseRequestURI("example.com/path")
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(res)
}

Результат выполнения кода:

go"parse \"example.com/path\": invalid URI for request"

Пример

Разберем URI с параметрами запроса и получим их значения с помощью метода Query:

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

Результат выполнения кода:

go"golang"
"2"
"asc"

Смотрите также

  • функцию url.Parse,
    которая разбирает URL с более мягкими требованиями к синтаксису
  • функцию url.QueryEscape,
    которая экранирует строку для использования в параметрах запроса
  • функцию url.QueryUnescape,
    которая декодирует экранированную строку параметров запроса
  • метод url.URL.String,
    который преобразует структуру URL обратно в строку