cpp

Отправка запроса методом POST с произвольными настройками

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

<?php
setcookie('b', '15', time() + 60 * 60 * 24, '/');
print_r(apache_request_headers());
echo "POST: ";
print_r($_POST);
echo "COOKIE: ";
print_r($_COOKIE);
?>

Теперь выполним запрос методом POST и обработаем результат, если код ответа сервера от 200 до 300 (не включая этот код) (листинг 19.10). Дополнительно установим тайм-аут запроса в 15 секунд, запишем cookies, укажем источник и получим заголовки ответа сервера.

Листинг 19.10. Отправка запроса методом POST с произвольными настройками

package main

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

func main() {
   client := &http.Client{
      Timeout: 15 * time.Second,
   }
   m := url.Values{}
   m.Add("color1", "красный")
   m.Add("color2", "белый")
   req, err := http.NewRequest("POST",
                               "http://localhost/index.php",
                               strings.NewReader(m.Encode()))
   if err != nil {
      fmt.Println(err)
      return
   }
   // Название робота
   req.Header.Set("User-Agent", "MySpider/1.0")
   // Откуда выполнен переход
   req.Header.Set("Referer", "/index.php")
   // Отправка данных формы
   req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
   // Cookies
   req.AddCookie(&http.Cookie{Name: "a", Value: "12"})
   // Выводим заголовки запроса
   fmt.Println("Заголовки запроса:")
   for k, v := range req.Header {
      fmt.Println(k, "=>", v)
   }
   // Выполняем запрос
   resp, err := client.Do(req)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer resp.Body.Close()
   if resp.StatusCode >= 300 {
      fmt.Println("Статус:", resp.Status)
      return
   }
   fmt.Println("Статус:", resp.Status)
   // Читаем ответ сервера
   fmt.Println("Ответ сервера:")
   body, err := io.ReadAll(resp.Body)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println(string(body))
   // Выводим заголовки ответа сервера
   fmt.Println("Заголовки ответа сервера:")
   for k, v := range resp.Header {
      fmt.Println(k, "=>", v)
   }
}

Примерный результат:

Заголовки запроса:
User-Agent => [MySpider/1.0]
Referer => [/index.php]
Content-Type => [application/x-www-form-urlencoded]
Cookie => [a=12]
Статус: 200 OK
Ответ сервера:
Array
(
    [Host] => localhost
    [User-Agent] => MySpider/1.0
    [Content-Length] => 87
    [Content-Type] => application/x-www-form-urlencoded
    [Cookie] => a=12
    [Referer] => /index.php
    [Accept-Encoding] => gzip
)
POST: Array
(
    [color1] => красный
    [color2] => белый
)
COOKIE: Array
(
    [a] => 12
)

Заголовки ответа сервера:
X-Powered-By => [PHP/7.2.0]
Set-Cookie => [b=15; expires=Thu, 05-May-2022 18:38:38 GMT; 
Max-Age=86400; path=/]
Content-Length => [335]
Content-Type => [text/html; charset=UTF-8]
Content-Language => [ru]
Date => [Wed, 04 May 2022 18:38:38 GMT]
Server => [Apache/2.4.29 (Win32) OpenSSL/1.1.0g PHP/7.2.0]

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

Помощь сайту

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

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

cpp