From 264dc51da4bd869023135fe7e2c1eecad1ed8ed9 Mon Sep 17 00:00:00 2001 From: Fedorov Vladimir Date: Mon, 21 Jul 2025 02:04:21 +0700 Subject: [PATCH] clear --- http/client.go | 63 --------------------------------------- http/client_test.go | 46 ----------------------------- http/read_response.go | 69 +++++++++++++++++++++++++++++++++++++++++++ http/response.go | 18 ----------- 4 files changed, 69 insertions(+), 127 deletions(-) delete mode 100644 http/client_test.go create mode 100644 http/read_response.go delete mode 100644 http/response.go diff --git a/http/client.go b/http/client.go index 33fd6da..3029700 100644 --- a/http/client.go +++ b/http/client.go @@ -1,11 +1,8 @@ package http import ( - "bufio" "errors" - "io" "net" - "strconv" "strings" ) @@ -53,63 +50,3 @@ func Do(method string, url string, headers []Header) (*Response, error) { ) return ReadResponse(conn) } - -func ReadResponse(r io.Reader) (*Response, error) { - b := bufio.NewReader(r) - - if _, err := b.ReadString(' '); err != nil { - return nil, errors.New("read httpVersion") - } - statusCode, err := b.ReadString(' ') - if err != nil { - return nil, errors.New("read statusCode") - } - statusCode = statusCode[:len(statusCode)-1] - if _, err := b.ReadString('\r'); err != nil { - return nil, errors.New("read statusName") - } - if _, err := b.ReadString('\n'); err != nil { - return nil, errors.New("read LF") - } - - headerStr := "" - contentLengthStr := "" - headers := []Header{} - for { - headerStr, err = b.ReadString('\n') - if err != nil { - return nil, errors.New("read header") - } - if headerStr == "\r\n" { - break - } - arr := strings.Split(headerStr, ": ") - value := strings.TrimSpace(arr[1]) - header := Header{Name: arr[0], Value: value} - if header.Name == "Content-Length" { - contentLengthStr = header.Value - } - headers = append(headers, header) - } - - length, err := strconv.Atoi(contentLengthStr) - if err != nil { - return nil, errors.New("read Content-Length") - } - - body := make([]byte, 0, length) - - for i := 0; i < length; i++ { - r, err := b.ReadByte() - if err != nil { - return nil, errors.New("read body") - } - body = append(body, r) - } - - return &Response{ - StatusCode: statusCode, - Headers: headers, - Body: body, - }, nil -} diff --git a/http/client_test.go b/http/client_test.go deleted file mode 100644 index 57d7183..0000000 --- a/http/client_test.go +++ /dev/null @@ -1,46 +0,0 @@ -package http - -import ( - "bytes" - "strings" - "testing" - - "github.com/stretchr/testify/assert" -) - -func Test_WriteRequest(t *testing.T) { - b := &strings.Builder{} - - WriteRequest( - b, - &Request{ - Method: "GET", - Path: "/", - Protocol: "HTTP/1.0", - }, - ) - - assert.Equal(t, "GET / HTTP/1.0\r\n\r\n", b.String()) -} - -func Test_ReadResponse(t *testing.T) { - b := bytes.NewBuffer( - []byte("HTTP/1.1 200 OK\r\nDate: Sat, 03 Feb 2024 16:40:29 GMT\r\nContent-Length: 12\r\nContent-Type: text/plain; charset=utf-8\r\n\r\nHello World!"), - ) - - r, err := ReadResponse(b) - assert.Nil(t, err) - - assert.Equal(t, 200, r.StatusCode) - - assert.Equal(t, "Date", r.Headers[0].Name) - assert.Equal(t, "Sat, 03 Feb 2024 16:40:29 GMT", r.Headers[0].Value) - - assert.Equal(t, "Content-Length", r.Headers[1].Name) - assert.Equal(t, "12", r.Headers[1].Value) - - assert.Equal(t, "Content-Type", r.Headers[2].Name) - assert.Equal(t, "text/plain; charset=utf-8", r.Headers[2].Value) - - assert.Equal(t, []byte("Hello World!"), r.Body) -} diff --git a/http/read_response.go b/http/read_response.go new file mode 100644 index 0000000..bd26c6e --- /dev/null +++ b/http/read_response.go @@ -0,0 +1,69 @@ +package http + +import ( + "bufio" + "errors" + "io" + "strconv" + "strings" +) + +func ReadResponse(r io.Reader) (*Response, error) { + b := bufio.NewReader(r) + + if _, err := b.ReadString(' '); err != nil { + return nil, errors.New("read httpVersion") + } + statusCode, err := b.ReadString(' ') + if err != nil { + return nil, errors.New("read statusCode") + } + statusCode = statusCode[:len(statusCode)-1] + if _, err := b.ReadString('\r'); err != nil { + return nil, errors.New("read statusName") + } + if _, err := b.ReadString('\n'); err != nil { + return nil, errors.New("read LF") + } + + headerStr := "" + contentLengthStr := "" + headers := []Header{} + for { + headerStr, err = b.ReadString('\n') + if err != nil { + return nil, errors.New("read header") + } + if headerStr == "\r\n" { + break + } + arr := strings.Split(headerStr, ": ") + value := strings.TrimSpace(arr[1]) + header := Header{Name: arr[0], Value: value} + if header.Name == "Content-Length" { + contentLengthStr = header.Value + } + headers = append(headers, header) + } + + length, err := strconv.Atoi(contentLengthStr) + if err != nil { + return nil, errors.New("read Content-Length") + } + + body := make([]byte, 0, length) + + for i := 0; i < length; i++ { + r, err := b.ReadByte() + if err != nil { + return nil, errors.New("read body") + } + body = append(body, r) + } + + return &Response{ + StatusCode: statusCode, + Headers: headers, + Body: body, + }, nil +} diff --git a/http/response.go b/http/response.go deleted file mode 100644 index 921caf6..0000000 --- a/http/response.go +++ /dev/null @@ -1,18 +0,0 @@ -package http - -import ( - "errors" -) - -var ( - ErrHeaderNotFound = errors.New("header not found") -) - -func (r *Response) GetHeader(name string) (Header, error) { - for _, h := range r.Headers { - if h.Name == name { - return h, nil - } - } - return Header{}, ErrHeaderNotFound -}