cpp

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

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

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

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

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

package main

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

func main() {
   client := &http.Client{
      Timeout: 15 * time.Second,
   }
   req, err := http.NewRequest("GET",
                               "http://localhost/index.php?x=5", nil)
   if err != nil {
      fmt.Println(err)
      return
   }
   // Название робота
   req.Header.Set("User-Agent", "MySpider/1.0")
   // Откуда выполнен переход
   req.Header.Set("Referer", "/index.php")
   // 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]
Cookie => [a=12]
Статус: 200 OK
Ответ сервера:
Array
(
    [Host] => localhost
    [User-Agent] => MySpider/1.0
    [Cookie] => a=12
    [Referer] => /index.php
    [Accept-Encoding] => gzip
)
GET: Array
(
    [x] => 5
)
COOKIE: Array
(
    [a] => 12
)

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

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

Помощь сайту

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

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

cpp