Повторное использование http-клиента Go

# #go #go-http

Вопрос:

Я хочу сделать запрос get для каждого параметра в массиве параметров. URL-адрес является статическим. Есть ли способ повторно использовать мой пользовательский http-клиент для каждой итерации? Я не хочу сбрасывать заголовок для каждого запроса. В идеале я хотел бы делать что-то подобное client.Do(param) для каждой итерации.

 client := amp;http.Client{}


for _, param := range params {
    uri := url   param

    req, err := http.NewRequest(http.MethodGet, uri, nil)

    req.Header.Add("Cookie", cookie)

    resp, _ := client.Do(req)

    defer resp.Body.Close()

    // do something...
}
 

Комментарии:

1. Вы уже повторно используете http — клиент. Вы должны создавать новый запрос для каждого запроса.

2. Я бы хотел сократить код в цикле. Могу ли я установить заголовок по умолчанию?

3. Даже если бы вы могли установить заголовок по умолчанию, в нем было бы ровно столько строк кода, поэтому вы не достигнете заявленной цели сокращения строк. И это также будет делать те же самые вещи в фоновом режиме, так что вы также не получите никакой эффективности.

Ответ №1:

Я думаю, что вы хотите просто сохранить свои файлы cookie и не устанавливать их по каждому запросу? Если это так, вы можете это сделать:

 import (
    "net/http"
    "net/http/cookiejar"
    "golang.org/x/net/publicsuffix"
)

// All users of cookiejar should import "golang.org/x/net/publicsuffix"
cookieJar, err := cookiejar.New(amp;cookiejar.Options{PublicSuffixList: publicsuffix.List})
if err != nil {
    panic(err)
}

var cookies []*http.Cookie
cookies = append(cookies, cookie)

u, err := url.Parse("http://whateversite.com")
if err != nil {
    panic(err)
}

jar.SetCookies(u, cookies)

client := amp;http.Client{
    Jar: cookieJar,
}