Utilisez Shifter avec Go
Intégrez les proxies résidentiels et ISP de Shifter dans Go en quelques minutes. Compatible avec le standard net/http, Resty, GoQuery, Colly, et tout client acceptant une *url.URL — aucun SDK requis.
Démarrage rapide
Installer
go get github.com/go-resty/resty/v2 Utilisation de base
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", ...}
} Fonctionnalités
Exemples
Standard net/http avec session persistante
L'option sans dépendance. Construisez un *http.Transport avec une URL de proxy — le même client peut être réutilisé en toute sécurité entre les 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 (plus ergonomique)
Resty encapsule net/http avec un builder fluide, une relance automatique et une liaison de réponse. Idéal pour les pipelines de scraping nécessitant une gestion propre des erreurs.
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 est la bibliothèque de scraping Go de référence. Configurez le proxy avec SetProxy() — chaque requête effectuée par le spider transitera par 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 sans interface)
Pilotez une vraie instance Chromium via Shifter pour les cibles rendues en JavaScript. chromedp utilise le protocole CDP de Chrome — aucune dépendance 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")
} Questions fréquentes Questions FAQ
Questions fréquentes sur l'utilisation de Shifter avec Go.
Analysez l'URL du proxy avec url.Parse, puis transmettez-la à un *http.Transport via http.ProxyURL(proxyURL). Utilisez ce transport sur un *http.Client. Le client peut être partagé entre les goroutines en toute sécurité et réutilise les connexions automatiquement.
Commencer à utiliser Shifter avec Go
Ajoutez les 205M+ proxies résidentiels et ISP de Shifter à vos services Go en moins de 5 minutes. Compatible avec net/http, Resty, Colly et chromedp.