Как правильно использовать http.ReadResponse в Go? - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь отправить запрос на сервер и получить ответ, используя функцию http.ReadResponse, но проблема в том, что он заблокирован и ничего не получено.

Сначала я подумал, что я использую неправильно сделанные запрос, поэтому теперь я использую nil в качестве второго аргумента для отправки запроса GET по умолчанию (как описано в документации), но ничего не изменилось.

Возможно, я неправильно использую bufio.Reader, но я действительно это делаю не думаю, потому что http.ReadRequest отлично работает.

func main() {
    var conn, _ = net.Dial("tcp", "localhost:80")
    defer conn.Close()

    var (
        reader        = bufio.NewReader(conn)
        response, err = http.ReadResponse(reader, nil)
    )
    if err == nil {
        fmt.Println(*response)
    }
}

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

Ваш запрос не будет работать. Создавая сокет, вы отправляете запрос уровня 4, когда вы должны отправлять запрос уровня 7 (http является частью уровня приложения). К счастью, библиотека http в go уже имеет реализации для Get. Итак, чтобы выполнить sh то, что вы хотите, просто сделайте следующее:

resp, _ http.Get("localhost:80")
body, _ = ioutil.ReadAll(resp.Body)

И тогда вы можете бросить тело в обработчик Go s JSON или превратить его в строку.

0 голосов
/ 29 марта 2020

Мое плохое: я неправильно интерпретировал описание документации . Я подумал, что функция http.ReadResponse отправляет переданный ей запрос до получения ответа («Иначе зачем нужен параметр запроса?» - подумал я). Но, как я теперь вижу, этот параметр необходим для других целей, и, возможно, я догадываюсь для чего, но это выходит за рамки topi c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...