| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- package main
- import (
- "bytes"
- "encoding/json"
- "fmt"
- "io"
- "log"
- "net/http"
- "net/url"
- )
- // User - структура для представления объекта пользователя
- type User struct {
- Name string `json:"name"`
- ID uint32 `json:"id"`
- }
- type Output struct {
- JSON struct {
- Name string `json:"name"`
- ID uint32 `json:"id"`
- } `json:"json"`
- URL string `json:"usr"`
- }
- func main() {
- // foo1()
- // postFormExample()
- queryExample()
- }
- func foo1() {
- // Создаем экземпляр структуры User
- var u = User{
- Name: "Alex",
- ID: 1,
- }
- // Кодируем структуру User в JSON (байтовый срез)
- bytesRepresentation, err := json.Marshal(u)
- if err != nil {
- log.Fatalln(err)
- }
- // Отправляем POST-запрос на сервер с JSON-телом
- resp, err := http.Post("https://httpbin.org/post", "application/json", bytes.NewBuffer(bytesRepresentation))
- if err != nil {
- log.Fatalln(err)
- }
- // Читаем и конвертируем тело ответа в байты
- bytesResp, err := io.ReadAll(resp.Body)
- if err != nil {
- log.Println(err)
- return
- }
- // Выводим содержимое тела ответа
- // fmt.Println(string(bytesResp))
- // Создаем экземпляр ответа сервера
- var out Output
- // Декодируем данные в формате JSON и заполняем структуру
- err = json.Unmarshal(bytesResp, &out)
- if err != nil {
- log.Println(err)
- return
- }
- fmt.Printf("%+v\n", out)
- fmt.Println(out.URL)
- /*
- var st string
- json.Unmarshal(bytesRepresentation, &st)
- fmt.Println(st)
- */
- }
- // Отправка данных в виде формы
- func postFormExample() {
- formData := url.Values{
- "name": {"hello"},
- "surename": {"golang post form"},
- }
- resp, err := http.PostForm("https://httpbin.org/post", formData)
- if err != nil {
- log.Fatalln(err)
- }
- var result map[string]interface{}
- json.NewDecoder(resp.Body).Decode(&result)
- log.Println(result["form"])
- fmt.Println("OK")
- }
- func queryExample() {
- // Создаем URL с параметрами
- baseURL := "https://example.com/api/resource"
- params := url.Values{}
- params.Add("param1", "value1")
- params.Add("param2", "value2")
- fullURL := baseURL + "?" + params.Encode()
- fmt.Println(fullURL)
- // Отправляем GET-запрос
- response, err := http.Get(fullURL)
- if err != nil {
- fmt.Println("Ошибка при отправлке GET-запроса:", err)
- return
- }
- defer response.Body.Close()
- // Чтение ответа
- // ...
- // Обработка ответа
- // ...
- }
- // http.NewRequest()
- // Todo - структура для представления объекта Todo
- type Todo struct {
- UserID int `json:"userId"`
- ID int `json:"id"`
- Title string `json:"title"`
- Complete bool `json:"completed"`
- }
- func newRequestExample() {
- todo := Todo{
- UserID: 1,
- ID: 2,
- Title: "наш title",
- Complete: true,
- }
- // Кодируем структуру Todo в формат JSON
- jsonReq, err := json.Marshal(todo)
- if err != nil {
- log.Println(err)
- return
- }
- // URL сервера
- baseURL := "https://jsonplaceholder.typicode.com/posts/1"
- // Создаем новый HTTP-запрос с методом POST
- req, err := http.NewRequest("POST", baseURL, bytes.NewBuffer(jsonReq))
- if err != nil {
- log.Println("Ошибка при создании запроса:", err)
- return
- }
- // Устанавливаем заголовки запроса
- req.Header.Set("Content-Type", "application/json; charset=UTF-8")
- // Отправляем запрос
- client := &http.Client{} // Создаем http клиент
- response, err := client.Do(req) // передаем выше подготовленный запрос на отправку
- if err != nil {
- log.Println("Ошибка при выполнении запроса: ", err)
- return
- }
- defer response.Body.Close() // не забываем закрыть тело
- // Читаем и конвертируем тело ответа в байты
- bodyBytes, err := io.ReadAll(response.Body)
- if err != nil {
- log.Println(err)
- }
- // Конвертируем тело ответа в строку и выводим
- bodyString := string(bodyBytes)
- fmt.Printf("API ответ в форме строки: %s\n", bodyString)
- // Конвертируем тело ответа в Todo struct
- var todoStruct Todo
- err = json.Unmarshl(bodyBytes, &todoStruct)
- if err != nil {
- log.Println(err)
- }
- // Выводим структуру
- fmt.Printf("API ответ в форме struct:\n%+v\n", todoStruct)
- // Вывод статуса ответа (если 200 - то успешный)
- fmt.Println("Статус ответа:", response.Status)
- }
|