Отправка HTTP-запроса является ключевым моментом для любого приложения, которому необходимо обмениваться данными через Интернет. Узнайте, как отправлять различные HTTP-запросы с помощью Go.
Одним из фундаментальных принципов, регулирующих функционирование Всемирной паутины, является обмен запросами и ответами. Когда вы отправляете запрос на доступ к веб-странице, сервер отвечает соответствующими данными.
Популярные протоколы, управляющие различными типами интернет-коммуникаций, включают HTTP (Протокол передачи гипертекста), FTP (Протокол передачи файлов) и SMTP (Простой протокол передачи почты).
HTTP — это протокол, который вы обычно используете при просмотре веб-сайта или использовании веб-приложения. Вы также можете работать с HTTP-запросами из многих языков программирования, включая Go.
Что такое HTTP-запрос?
HTTP определяет, как клиенты, такие как веб-браузеры, отправляют запросы на серверы, которые затем возвращают ответ. HTTP-запрос содержит информацию о ресурсе, к которому пытается получить доступ клиент. Сообщение запроса обычно содержит URL-адрес, который идентифицирует ресурс, и другие необязательные данные, такие как заголовки и параметры запроса.
Есть несколько типов 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 из твой.