Допустим нужно запросить данные с какого-либо сайта, но делать это нужно через прокси-сервер. Вариантов как это сделать множество. Рассмотрим некоторые из них. Самый очевидный, если вы используете стандартный http-клиент, сконфигурировать его:
var proxy = "http://" + user + ":" + password + "@" + ip + ":" + port
//creating the proxyURL
proxyURL, err := url.Parse(proxy)
if err != nil {
log.Println(err)
}
transport := &http.Transport{
Proxy: http.ProxyURL(proxyURL),
}
//adding the Transport object to the http Client
client := &http.Client{
Transport: transport,
Timeout: time.Second * timeout,
}
После чего все запросы сделанные через client будут проксироваться.
Также можно на лету менять прокси для клиента:
client.Transport = transport
В остальном
//generating the HTTP GET request
request, err := http.NewRequest("GET", url.String(), nil)
if err != nil {
log.Println(err)
}
//calling the URL
response, err := client.Do(request)
if err != nil {
log.Println(err)
}
//getting the response
data, err := ioutil.ReadAll(response.Body)
if err != nil {
log.Println(err)
}
//printing the response
log.Println(string(data))
Однако, стандартный http-клиент в Golang плохо работает с ошибками возникающими во время запроса и производить отладку бывает затруднительно.