http: ContentLength = 99 с длиной тела 0 - PullRequest
0 голосов
/ 27 марта 2019

У меня есть эта функция для выполнения http-запроса

func do(r *http.Request) (response *http.Response, e error) {
    r.Header.Set(SessionHeader, client.SessionId)
    response, e = client.Do(r)
    if e != nil {
        return nil, e
    }
    if response.StatusCode == http.StatusConflict {
        client.SessionId = response.Header.Get(SessionHeader)
        r.Header.Set(SessionHeader, client.SessionId)
        response, e = client.Do(r)
        if e != nil {
            return nil, e
        }
        return
    } else if response.StatusCode != http.StatusOK {
        return nil, errors.New("status Not OK")
    }
    return
}

Итак, я делаю запрос, и если мой идентификатор сессии недействителен, я устанавливаю заголовок из ответа и пытаюсь повторить попытку.Проблема заключается в том, что тело было сброшено, когда я делаю это, и появляется эта ошибка:

Post http://localhost/api: http: ContentLength=99 with Body length 0

Как мне обойти эту проблему?

1 Ответ

0 голосов
/ 28 марта 2019

Создайте запрос и используйте его.

func do(r *http.Request) (response *http.Response, err error) {
    r.Header.Set(SessionHeader, client.SessionId)
    response, err = client.Do(r)
    if err != nil {
        return nil, err
    }

    if response.StatusCode == http.StatusConflict {
        // Get SessionId
        client.SessionId = response.Header.Get(SessionHeader)

        // Create Request
        req, err := http.NewRequest("GET", "http://example.com", nil)   
        req.Header.Set("SessionHeader", client.SessionId)

        response, err := client.Do(req)
        if err != nil {
            return nil, err
        }
        return
    } else if response.StatusCode != http.StatusOK {
        return nil, errors.New("status Not OK")
    }
    return
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...