timeout.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. package main
  2. import (
  3. "fmt"
  4. "io"
  5. "log"
  6. "net"
  7. "net/http"
  8. "os"
  9. )
  10. func main() {
  11. // httpExample()
  12. httpExample2()
  13. /*
  14. // Подключаемся к серверу
  15. conn, err := net.Deal("tcp", "localhost:4545")
  16. if err != nil {
  17. fmt.Println(err)
  18. return
  19. }
  20. defer conn.Close()
  21. for {
  22. var source string
  23. // Запрашиваем у пользователя ввод
  24. fmt.Print("Введите слово: ")
  25. _, err := fmt.Scan(&source)
  26. if err != nil {
  27. fmt.Println("Некорректный ввод", err)
  28. continue
  29. }
  30. // Отправляем сообщение
  31. if n, err := conn.Write([]byte(source)); n == 0 || err != nil {
  32. fmt.Println(err)
  33. return
  34. }
  35. // Устанавливаем таймаут на чтение ответа
  36. fmt.Println("Ответ:")
  37. conn.SetReadDeadLine(time.Now().Add(time.Second * 5))
  38. // Чтение данных в отдельном цикле
  39. // Если сервер пришлет больше данных, они будут обработаны
  40. for {
  41. buff := make([]byte, 1024)
  42. n, err := conn.Read(buff)
  43. if err != nil {
  44. break
  45. }
  46. fmt.Print(string(buff[0:n]))
  47. // Сбрасываем таймаут до 700 миллисекунд после первых 1024 байт
  48. conn.SetReadDeadLine(time.Now().Add(time.Millisecond))
  49. }
  50. }
  51. */
  52. }
  53. func httpExample() {
  54. httpRequest := "GET / HTTP/1.1\n" +
  55. "Host: go.dev\r\n" +
  56. "Connection: close\r\n" +
  57. "\r\n"
  58. conn, err := net.Dial("tcp", "go.dev:80")
  59. if err != nil {
  60. fmt.Println(err)
  61. return
  62. }
  63. defer conn.Close()
  64. if _, err = conn.Write([]byte(httpRequest)); err != nil {
  65. fmt.Println(err)
  66. return
  67. }
  68. io.Copy(os.Stdout, conn)
  69. fmt.Println("Done")
  70. }
  71. func httpExample2() {
  72. // http запрос с методом GET
  73. resp, err := http.Get("https://golang.org")
  74. if err != nil {
  75. log.Println(err)
  76. return
  77. }
  78. // Закрываем телол ответа после работы с ним
  79. defer resp.Body.Close()
  80. data, err := io.ReadAll(resp.Body) // читаем ответ
  81. if err != nil {
  82. log.Println(err)
  83. return
  84. }
  85. fmt.Printf("%s", data)
  86. }