En date du 7 octobre 2026, Shifter dispose du plus grand pool d'IP US actives, devant Oxylabs et Bright Data, pour une fraction du coût.Shifter a désormais le plus grand pool d'IP US actives

Voir les benchmarks
Intégration

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("http://ip-info.com/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

Support natif pour net/http, Resty, GoQuery, Colly, fasthttp et tout client acceptant un proxy *url.URL
Rotation par requête par défaut, avec `sid` pour les sessions persistantes et `ttl-N` pour des épinglages temporisés de N secondes
Support des navigateurs sans interface via chromedp et Rod pour les cibles rendues en JavaScript
Protocoles HTTP, HTTPS et SOCKS5 sur le même point d'accès passerelle
Géociblage dans 195+ pays via des paramètres de nom d'utilisateur — aucun SDK supplémentaire requis
Compatible avec toutes les versions de Go depuis la 1.18, y compris les modules, les go-workspaces et les builds sans CGO

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")
}
FAQ

Foire aux questions

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.

Appelez resty.New().SetProxy(proxyURL). Resty gère le transport sous-jacent pour vous. Le format de l'URL du proxy est `http://USER:PASS@p.shifter.io:443`. Vous pouvez également chaîner SetRetryCount et SetTimeout pour un scraping de niveau production.

Oui. Appelez c.SetProxy(proxyURL) sur votre collecteur — Colly acheminera chaque requête via Shifter. Utilisez SetProxyFunc pour une rotation en round-robin sur plusieurs sessions, ou passez une URL Shifter avec un sid unique par spider pour des scrapes parallèles.

Ajoutez un identifiant de session au nom d'utilisateur du proxy — par exemple `customer-USERNAME-country-us-sid-123ABC`. Chaque requête Go utilisant la même URL de proxy réutilisera la même IP résidentielle. Ajoutez `ttl-N` pour fixer cette IP pendant N secondes au maximum.

Oui. Utilisez chromedp avec chromedp.ProxyServer dans vos options ExecAllocator. Pour l'authentification par nom d'utilisateur et mot de passe, associez cela à la liste blanche d'IP de Shifter — Chrome ne demande pas les identifiants du proxy en mode sans interface sans extension sidecar.

Aucun SDK n'est requis. Shifter utilise le protocole HTTP et SOCKS5 standard — pointez votre transport existant vers `p.shifter.io:443`. Cela maintient votre go.mod libre de toute dépendance fournisseur et fonctionne avec n'importe quel client HTTP de l'écosystème.

Commencer

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.

Essayez Shifter gratuitementConfiguration en quelques minutes. Annulez à tout moment.