cpp

Отправка запроса методом GET

Отправить запрос методом GET и получить результат позволяет функция Get() из пакета net/http. Запрос можно отправить по протоколам HTTP и HTTPS, при этом все перенаправления автоматически обрабатываются. Если перенаправлений больше десяти, то запрос завершается с ошибкой. Формат функции:

http.Get(url string) (resp *http.Response, err error)

Функция в качестве параметра принимает URL-адрес в виде строки. Передаваемые данные указываются в составе URL-адреса после вопросительного знака. Формат данных:

<Имя1>=<Значение1>&...&<ИмяN>=<ЗначениеN>

Все специальные символы должны быть закодированы. Для кодирования можно использовать тип Values (см. разд. 19.2) или функции из разд. 19.3:

m := url.Values{}
m.Add("color1", "красный")
m.Add("color2", "белый")
u := "http://localhost/index.php?" + m.Encode()

Обратите внимание: мы не имеем возможности формировать заголовки запроса, поэтому используются значения заголовков по умолчанию. Например, значением заголовка User-Agent (название нашего робота) будет Go-http-client/1.1.

Функция возвращает два значения. Через первое возвращаемое значение доступен указатель на объект структуры Response, с помощью которого можно обработать результат. Через второе возвращаемое значение доступен объект ошибки или значение nil, если операция выполнена успешно.

Давайте изменим содержимое файла C:\xampp\htdocs\index.php следующим образом:

<?php
print_r($_GET);
?>

Теперь выполним запрос методом GET и обработаем результат, если код ответа сервера от 200 до 300 (не включая этот код) (листинг 19.2). Предварительно запускаем Web-сервер Apache.

Листинг 19.2. Отправка запроса методом GET

package main

import (
   "fmt"
   "io"
   "net/http"
   "net/url"
)

func main() {
   m := url.Values{}
   m.Add("color1", "красный")
   m.Add("color2", "белый")
   u := "http://localhost/index.php?" + m.Encode()
   fmt.Println("URL:", u)
   resp, err := http.Get(u)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer resp.Body.Close()
   if resp.StatusCode >= 300 {
      fmt.Println("Статус:", resp.Status)
      return
   }
   fmt.Println("Статус:", resp.Status)
   body, err := io.ReadAll(resp.Body)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println(string(body))
}

Результат:

URL: http://localhost/index.php?color1=%D0%BA%D1%80%D0%B0%D1%81
%D0%BD%D1%8B%D0%B9&color2=%D0%B1%D0%B5%D0%BB%D1%8B%D0%B9
Статус: 200 OK
Array
(
    [color1] => красный
    [color2] => белый
)

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp