Use a Shifter com Go
Integre os proxies residenciais e de ISP do Shifter ao Go em minutos. Funciona com o net/http padrão, Resty, GoQuery, Colly e qualquer cliente que aceite um *url.URL, sem necessidade de SDK.
Início Rápido
Instalar
go get github.com/go-resty/resty/v2 Uso Básico
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
proxyURL, _ := url.Parse(
"customer-USERNAME-country-us-sid-123ABC:PASSWORD@p.shifter.io:443",
)
client := &http.Client{
Transport: &http.Transport{Proxy: http.ProxyURL(proxyURL)},
}
resp, _ := client.Get("https://ipinfo.io/json")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
// {"ip": "154.16.xxx.xxx", "city": "New York", "country": "US", ...}
} Recursos
Exemplos
net/http padrão com Sticky Session
A opção sem dependências. Crie um *http.Transport com uma URL de proxy: o mesmo cliente pode ser reutilizado com segurança entre goroutines.
package main
import (
"crypto/rand"
"encoding/hex"
"fmt"
"io"
"net/http"
"net/url"
"time"
)
func newClient(country, city string) *http.Client {
sidBytes := make([]byte, 4)
rand.Read(sidBytes)
sid := hex.EncodeToString(sidBytes)
proxyURL, _ := url.Parse(fmt.Sprintf(
"customer-USERNAME-country-%s-city-%s-sid-%s-ttl-300:PASSWORD@p.shifter.io:443",
country, city, sid,
))
return &http.Client{
Timeout: 30 * time.Second,
Transport: &http.Transport{
Proxy: http.ProxyURL(proxyURL),
MaxIdleConnsPerHost: 16,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ResponseHeaderTimeout: 20 * time.Second,
},
}
}
func main() {
c := newClient("uk", "london")
for _, path := range []string{"/login", "/dashboard", "/orders"} {
req, _ := http.NewRequest("GET", "https://example.co.uk"+path, nil)
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36")
resp, err := c.Do(req)
if err != nil {
fmt.Println("error:", err)
continue
}
body, _ := io.ReadAll(resp.Body)
resp.Body.Close()
fmt.Println(path, resp.StatusCode, len(body), "bytes")
}
} Resty (mais ergonômico)
O Resty encapsula o net/http com um builder fluente, retry automático e vinculação de respostas. Vale a pena para pipelines de scraping que precisam de um tratamento de erros limpo.
package main
import (
"fmt"
"github.com/go-resty/resty/v2"
)
type Product struct {
ID int `json:"id"`
Name string `json:"name"`
Price float64 `json:"price"`
}
func main() {
client := resty.New().
SetProxy("customer-USERNAME-country-de-sid-456DEF:PASSWORD@p.shifter.io:443").
SetRetryCount(3).
SetRetryWaitTime(2_000_000_000). // 2s in ns
SetHeader("User-Agent", "Mozilla/5.0 (Macintosh) AppleWebKit/537.36")
var products []Product
resp, err := client.R().
SetResult(&products).
Get("https://api.example.de/products")
if err != nil || !resp.IsSuccess() {
fmt.Println("error:", err, resp.Status())
return
}
for _, p := range products {
fmt.Printf("%d %s — %.2f EUR\n", p.ID, p.Name, p.Price)
}
} Colly (framework de scraping)
Colly é a biblioteca de scraping de fato para Go. Configure o proxy com SetProxy(), cada requisição feita pelo spider será roteada através da Shifter.
package main
import (
"fmt"
"log"
"github.com/gocolly/colly/v2"
)
func main() {
c := colly.NewCollector(
colly.AllowedDomains("example.com"),
colly.UserAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36"),
)
if err := c.SetProxy(
"customer-USERNAME-country-fr-city-paris-sid-789GHI:PASSWORD@p.shifter.io:443",
); err != nil {
log.Fatal(err)
}
c.OnHTML("article.post", func(e *colly.HTMLElement) {
fmt.Println(e.ChildText("h2"), "->", e.ChildAttr("a", "href"))
})
c.OnError(func(r *colly.Response, err error) {
fmt.Printf("error %d: %v\n", r.StatusCode, err)
})
c.Visit("https://example.com/blog")
} chromedp (Chromium headless)
Execute uma instância real de Chromium através do Shifter para alvos renderizados em JavaScript. O chromedp usa o protocolo CDP do Chrome, sem dependência do Selenium.
package main
import (
"context"
"fmt"
"time"
"github.com/chromedp/chromedp"
)
func main() {
opts := append(chromedp.DefaultExecAllocatorOptions[:],
chromedp.ProxyServer("http://p.shifter.io:443"),
chromedp.Flag("headless", true),
)
allocCtx, cancel := chromedp.NewExecAllocator(context.Background(), opts...)
defer cancel()
ctx, cancel := chromedp.NewContext(allocCtx)
defer cancel()
ctx, cancel = context.WithTimeout(ctx, 30*time.Second)
defer cancel()
var html string
err := chromedp.Run(ctx,
// chromedp doesn't natively prompt for proxy auth — use a Chrome
// extension or run a sidecar that injects credentials, or use
// Shifter's IP-whitelist auth instead of user/pass.
chromedp.Navigate("https://example.com"),
chromedp.WaitVisible("body", chromedp.ByQuery),
chromedp.OuterHTML("html", &html),
)
if err != nil {
fmt.Println("error:", err)
return
}
fmt.Println(len(html), "bytes")
} Perguntas frequentes
Perguntas comuns sobre usar o Shifter com Go.
Analise a URL do proxy com url.Parse, depois passe-a para um *http.Transport via http.ProxyURL(proxyURL). Use esse transport em um *http.Client. O client é seguro para compartilhar entre goroutines e reutiliza conexões automaticamente.
Chame resty.New().SetProxy(proxyURL). O Resty cuida do transporte subjacente para você. O formato da URL do proxy é `http://USER:PASS@p.shifter.io:443`. Você também pode encadear SetRetryCount e SetTimeout para scraping em nível de produção.
Sim. Chame c.SetProxy(proxyURL) no seu collector — o Colly roteará todas as solicitações pelo Shifter. Use SetProxyFunc para round-robin entre múltiplas sessões, ou passe uma URL do Shifter com um sid exclusivo por spider para scrapes paralelos.
Adicione um ID de sessão ao nome de usuário do proxy, por exemplo, `customer-USERNAME-country-us-sid-123ABC`. Toda requisição Go que usar a mesma URL de proxy reutilizará o mesmo IP residencial. Adicione `ttl-N` para fixar esse IP por até N segundos.
Sim. Use o chromedp com chromedp.ProxyServer nas opções do seu ExecAllocator. Para autenticação por usuário e senha, combine isso com a lista de IPs permitidos da Shifter: o Chrome não solicita credenciais de proxy no modo headless sem uma extensão auxiliar.
Nenhum SDK é necessário. A Shifter fala HTTP e SOCKS5 puro, aponte seu transporte existente para `p.shifter.io:443`. Isso mantém seu go.mod livre de dependência de fornecedor e funciona com qualquer cliente HTTP do ecossistema.
Comece a Usar o Shifter com Go
Adicione os proxies residenciais e ISP 205M+ da Shifter aos seus serviços Go em menos de 5 minutos. Funciona com net/http, Resty, Colly e chromedp.