transport := http.DefaultTransport.(*http.Transport).Clone()
transport.Proxy = http.ProxyURL(proxyURL)
transport.OnProxyConnectResponse = func(
    _ context.Context,
    _ *url.URL,
    _ *http.Request,
    response *http.Response,
) error {
    observeConnect(response.StatusCode, response.Header.Get("X-Proxy-Region"))
    return nil
}
client := &http.Client{Transport: transport}

Utilisez context, net/http et net/url ; l'assertion de type standard suppose que ce transport reste installé. proxyURL est analysé, et observeConnect doit être sûr vis-à-vis de la concurrence. Pour les sondes HTTPS publiques autorisées, la liste de proxys HTTP fournit des candidats pour cette URL de proxy.

Le callback s'exécute avant la vérification de CONNECT pour un 200 réussi, il peut donc aussi observer un 407. Nil poursuit la vérification normale et n'accepte pas un tunnel rejeté ; une erreur fait échouer la requête.

X-Proxy-Region est un exemple défini par le fournisseur. Lisez ici le statut et les en-têtes et laissez la propriété du corps et du socket à Transport, qui gère ensuite le TLS de la destination.

Ceci observe l'établissement d'un nouveau tunnel, pas chaque requête. Une connexion réutilisée n'a pas de nouvelle réponse CONNECT, et la réponse du site a des en-têtes distincts.

Articles similaires