libcurl associe la configuration du proxy à l'easy handle qui effectue le transfert. Définissez l'adresse de l'intermédiaire sur ce handle, en laissant CURLOPT_URL comme URL de destination.

Le fragment suivant suppose que libcurl est initialisé et que handle est un easy handle valide :

char error[CURL_ERROR_SIZE] = {0};
CURLcode result;

result = curl_easy_setopt(handle, CURLOPT_ERRORBUFFER, error);
if (result == CURLE_OK)
    result = curl_easy_setopt(handle, CURLOPT_URL,
                              "https://example.com/");
if (result == CURLE_OK)
    result = curl_easy_setopt(handle, CURLOPT_PROXY,
                              "http://proxy.example:8080");
if (result == CURLE_OK)
    result = curl_easy_perform(handle);

if (result != CURLE_OK)
    fprintf(stderr, "%s\n", error[0] ? error
                                  : curl_easy_strerror(result));

Gardez le tampon d'erreur vivant tant que le handle y fait référence. Avant de quitter sa portée, nettoyez le handle ou remplacez ou effacez son pointeur CURLOPT_ERRORBUFFER. Le nom d'hôte du proxy est un espace réservé ; un candidat non authentifié de la liste de proxys HTTP peut fournir l'adresse pour ce test de site public. Utilisez son schéma et son port réels, et vérifiez s'il autorise le tunnel HTTPS.

Une destination HTTPS peut utiliser un proxy HTTP. libcurl gère le tunnel pour ce transfert HTTPS. Le http:// de l'option proxy décrit la connexion à l'intermédiaire. Remplacez-le par https:// uniquement pour un point de terminaison proxy qui accepte réellement TLS et une compilation libcurl qui le prend en charge.

Rendez l'itinéraire effectif délibéré

Une option de proxy explicite remplace le réglage d'environnement de proxy correspondant. Le contournement est une décision distincte : un no_proxy hérité peut encore exclure la destination. Si ce handle doit utiliser le proxy choisi pour chaque destination qui lui est donnée, configurez CURLOPT_NOPROXY comme une chaîne vide dans le cadre de cette politique.

À l'inverse, définir CURLOPT_PROXY sur une chaîne vide désactive explicitement l'utilisation du proxy. Le définir sur NULL supprime l'affectation explicite et autorise à nouveau le comportement basé sur l'environnement. Ces deux valeurs servent des objectifs différents.

Un en-tête spécifique à la cible tel que Content-Type: text/xml ne sélectionne pas le proxy. Ajoutez-le uniquement lorsque le corps réel de la requête et l'API de destination nécessitent ce type de média.

Lisez aussi le résultat HTTP

Un curl_easy_perform réussi ne signifie pas que le site a renvoyé un statut HTTP réussi. Lisez CURLINFO_RESPONSE_CODE et appliquez le traitement des statuts de l'application. La réponse CONNECT du proxy a sa propre valeur, CURLINFO_HTTP_CONNECTCODE ; un rejet de tunnel précède toute réponse du site.

CURLOPT_FAILONERROR peut traiter de nombreuses erreurs HTTP comme des échecs, mais sa documentation signale des exceptions d'authentification. Gardez le défi 407 d'un proxy distinct du statut de la destination.

Articles similaires