Отправка HTTP-запроса является ключевым моментом для любого приложения, которому необходимо обмениваться данными через Интернет. Узнайте, как отправлять различные HTTP-запросы с помощью Go.

Одним из фундаментальных принципов, регулирующих функционирование Всемирной паутины, является обмен запросами и ответами. Когда вы отправляете запрос на доступ к веб-странице, сервер отвечает соответствующими данными.

Популярные протоколы, управляющие различными типами интернет-коммуникаций, включают HTTP (Протокол передачи гипертекста), FTP (Протокол передачи файлов) и SMTP (Простой протокол передачи почты).

HTTP — это протокол, который вы обычно используете при просмотре веб-сайта или использовании веб-приложения. Вы также можете работать с HTTP-запросами из многих языков программирования, включая Go.

Что такое HTTP-запрос?

HTTP определяет, как клиенты, такие как веб-браузеры, отправляют запросы на серверы, которые затем возвращают ответ. HTTP-запрос содержит информацию о ресурсе, к которому пытается получить доступ клиент. Сообщение запроса обычно содержит URL-адрес, который идентифицирует ресурс, и другие необязательные данные, такие как заголовки и параметры запроса.

instagram viewer

Есть несколько типов HTTP-запросов, включая GET, POST, PUT, DELETE, HEAD, OPTIONS и CONNECT. Наиболее распространены первые четыре типа методов; они отражают операции чтения, создания, обновления и удаления CRUD соответственно.

Тип запроса PUT часто используется взаимозаменяемо с типом запроса PATCH. Они достигают одной и той же цели, они просто отличаются данными, которые они ожидают включить в запрос.

Отправка запросов с использованием общих методов HTTP

встроенный в Go http упаковка предоставляет набор функций и структур, которые можно использовать для создания веб-серверов и управления HTTP-запросами. Это очень надежный пакет, и все веб-фреймворки Go так или иначе строятся на его основе. Это подпакет Go сеть упаковка.

Чтобы создать HTTP-запрос в Go, вы можете использовать http. Новый запрос() и установите соответствующий метод, URL-адрес, заголовки и текст запроса. После создания запроса вы можете использовать кнопку Go сеть/http пакет http. Клиент{} структура для запуска и получения ответа.

В следующих примерах кода используется reqres.in, общедоступный API для тестирования HTTP-запросов. Вы можете использовать его для тестирования запросов GET, POST, PUT и DELETE в ваших программах Go.

Почтовый запрос

Приведенный ниже код представляет собой функцию, которая отправляет запрос POST в /api/users конечная точка reqres.in для создания нового пользователя с именем и заданием.

упаковка основной

Импортировать (
"байты"
"кодировка/json"
"ФМТ"
"ио"
"сеть/http"
)

функцияСоздать пользователя(имя, должность нить) {
ФМТ. Распечатать("Создание пользователя...")

апиурл := " https://reqres.in/api/users"
пользовательские данные: = []байт(`{"имя":"` + имя + `","работа":"` + работа + `"}`)

// создаем новый http-запрос
запрос, ошибка := http. Новый запрос("ПОЧТА", apiUrl, байт. Новый буфер (данные пользователя))
запрос. Заголовок. Набор("Тип содержимого", "приложение/json; кодировка=utf-8")

// отправить запрос
клиент := &http. Клиент{}
ответ, ошибка := клиент. Делать (просьба)

если ошибка != ноль {
ФМТ. Println (ошибка)
}

responseBody, ошибка := io. Прочитать все (ответ. Тело)

если ошибка != ноль {
ФМТ. Println (ошибка)
}

форматированные данные: = формат JSON (тело ответа)
ФМТ. Распечатать("Положение дел: ", ответ. Положение дел)
ФМТ. Распечатать("Тело ответа:", отформатированные данные)

// очищаем память после выполнения
отложить ответ. Тело. Закрывать()
}

форматJSON — это пользовательская функция, которую вы можете написать для форматирования выходных данных. Вот как вы можете это реализовать:

// функция для форматирования данных JSON
функцияформатJSON(данные []байт)нить {
вар байтов. Буфер
ошибка := json. Отступ(&out, данные, "", " ")

если ошибся != ноль {
ФМТ. Println (ошибка)
}

д := выход. Байты()
возвращатьсянить(г)
}

Вы можете позвонить в Создать пользователя() работать в такой программе:

функцияосновной() {
ФМТ. Распечатать("Выполнение POST-запроса...")
Создать пользователя("Тим Омолана", "Писатель")
}

Когда вы запускаете программу в терминале, используя идти на пробежку команды, вы увидите вывод, подобный этому:

ПОЛУЧИТЬ запрос

Следующий код представляет собой функцию, которая отправляет запрос GET для получения пользователя с сервера reqres.in с использованием его уникального идентификатора.

// main.go
функцияполучитьпользователя(идентификатор нить) {
ФМТ. Распечатать("Получение пользователя по ID...")

// делаем GET-запрос к API для получения пользователя по ID
апиурл := " https://reqres.in/api/users/" + идентификатор
запрос, ошибка := http. Новый запрос("ПОЛУЧАТЬ", ноль)

если ошибка != ноль {
ФМТ. Println (ошибка)
}

запрос. Заголовок. Набор("Тип содержимого", "приложение/json; кодировка=utf-8")

клиент := &http. Клиент{}
ответ, ошибка := клиент. Делать (просьба)

если ошибка != ноль {
ФМТ. Println (ошибка)
}

responseBody, ошибка := io. Прочитать все (ответ. Тело)

если ошибка != ноль {
ФМТ. Println (ошибка)
}

форматированные данные: = формат JSON (тело ответа)
ФМТ. Распечатать("Положение дел: ", ответ. Положение дел)
ФМТ. Распечатать("Тело ответа:", отформатированные данные)

// очищаем память после выполнения
отложить ответ. Тело. Закрывать()
}

Запрос GET не отправляет данные на сервер, поэтому он не принимает и не отправляет тело запроса на сервер при его выполнении. Вот как будет выглядеть пример вызова функции выше:

функцияосновной() {
ФМТ. Распечатать("Выполнение запроса GET...")
получить пользователя ("2")
}

Выход:

PUT-запрос

Запрос PUT очень похож на запрос POST, поскольку он также отправляет данные на сервер. Основное отличие состоит в том, что POST создает новый ресурс, а PUT обновляет существующий.

Вот реализация запроса PUT:

// main.go
функцияupdateUser(имя, работа, id нить) {
ФМТ. Распечатать("Обновление пользователя...")

// сделать запрос PUT к API для обновления пользователя
апиурл := " https://reqres.in/api/users/" + идентификатор
пользовательские данные: = []байт(`{"имя":"` + имя + `","работа":"` + работа + `"}`)

// создаем новый HTTP-запрос PUT
запрос, ошибка := http. Новый запрос("ПОМЕЩАТЬ", apiUrl, байт. Новый буфер (данные пользователя))
запрос. Заголовок. Набор("Тип содержимого", "приложение/json; кодировка=utf-8")

// Оставшееся тело функции из функции createUser...
// Делаем запрос, получаем ответ и очищаем память...
}

Из этого кода вы можете видеть, что единственными различиями между запросом PUT и запросом POST выше являются имя метода и URL-адрес. При использовании PUT для обновления существующих данных вам необходимо добавить идентификатор к URL-адресу запроса. Пример вызова этой функции будет выглядеть так:

основная функция () {
// обновить запись с идентификатором 2.
обновить пользователя ("Тим Ньюнейм", «Штатный писатель», "2")
}

Приведенный выше код обновляет пользователя и выдает следующий вывод:

УДАЛИТЬ запрос

Используйте метод запроса DELETE для выполнения операции удаления на веб-сервере. Запрос на удаление удаляет ресурс, идентифицированный URI. Запрос DELETE в Go выглядит так:

функцияудалить пользователя(идентификатор нить) {
ФМТ. Распечатать("Удаление пользователя...")
// делаем запрос DELETE к API на удаление пользователя
апиурл := " https://reqres.in/api/users/" + идентификатор

// создаем новый http-запрос
запрос, ошибка := http. Новый запрос("УДАЛИТЬ", ноль)
запрос. Заголовок. Набор("Тип содержимого", "приложение/json; кодировка=utf-8")

клиент := &http. Клиент{}
ответ, ошибка := клиент. Делать (просьба)
если ошибка != ноль {
ФМТ. Println (ошибка)
}

ФМТ. Распечатать("Положение дел: ", ответ. Положение дел)
}

Запрос DELETE не принимает и не возвращает тело, поэтому нет необходимости анализировать или форматировать тело запроса и ответа JSON. Ответ возвращает только статус, указывающий на успех или неудачу. Вот как выглядит пример вызова функции с ее выводом:

функцияосновной() {
ФМТ. Распечатать("Выполняется запрос DELETE...")
удалить пользователя ("2")
}

Выход:

Экономьте время, используя http. Почта() и http. Получать() методы из сеть/http пакет, чтобы сделать ПОЧТА и ПОЛУЧАТЬ запросы напрямую, без использования Новый запрос() функции и Клиент{} структура, чтобы создать и сделать запрос отдельно. Проверьте сетевая/http-документация Чтобы получить больше информации.

Выполнение HTTP-запросов в приложениях Go

http package в Go предоставляет все необходимое для выполнения HTTP-запросов и обработки ответов в приложениях Go. Функции и структуры, предоставляемые пакетом, позволяют создавать и отправлять различные типы запросов, такие как GET, POST, PUT, DELETE и многие другие.

Это упрощает создание веб-приложений на Go, которые могут взаимодействовать с другими веб-сервисами и API. Хороший способ получить более знакомым с выполнением HTTP-запросов в Go является создание приложения, которое отправляет запросы к другому REST API из твой.