cpp

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

Отправить запрос методом POST и получить результат позволяет функция PostForm() из пакета net/http. Запрос можно отправить по протоколам HTTP и HTTPS. Формат функции:

http.PostForm(url string,
              data url.Values) (resp *http.Response, err error)

Функция в качестве первого параметра принимает URL-адрес в виде строки, а в качестве второго — экземпляр структуры Values (см. разд. 19.2) с данными. Закодированные данные отправляются в теле запроса, а не в составе URL-адреса. При отправке запроса добавляются заголовки Content-Type (значение: application/x-www-form-urlencoded) и Content-Length (длина данных).

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

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

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

<?php
print_r($_POST);
?>

Теперь выполним запрос методом POST и обработаем результат (листинг 19.3).

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

package main

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

func main() {
   m := url.Values{}
   m.Add("color1", "красный")
   m.Add("color2", "белый")
   fmt.Println("Data:", m.Encode())
   resp, err := http.PostForm("http://localhost/index.php", m)
   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))
}

Если все выполнено правильно, то получим следующий результат:

Data: 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