Poñer un proxy explícito nun easy handle de libcurl
Configure un easy handle de libcurl para un proxy concreto e separe os erros de opción, os fallos de transferencia e o estado HTTP.
libcurl asocia a configuración do proxy ao easy handle que realiza a transferencia. Estableza o enderezo do intermediario nese handle, deixando CURLOPT_URL como URL de destino.
O seguinte fragmento supón que libcurl xa está inicializado e que handle é un easy handle válido:
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));
Manteña vivo o búfer de erros mentres o handle faga referencia a el. Antes de saír do seu ámbito, limpe o handle ou substitúa ou borre o seu punteiro CURLOPT_ERRORBUFFER. O nome de host do proxy é un marcador de posición; un candidato non autenticado da lista de proxies HTTP pode fornecer o enderezo para esta proba nun sitio público. Use o seu esquema e porto reais, e comprobe se permite o túnel HTTPS.
Un destino HTTPS pode usar un proxy HTTP. libcurl xestiona o túnel para esa transferencia HTTPS. O http:// da opción de proxy describe a conexión co intermediario. Cámbieo a https:// só para un punto final de proxy que acepte realmente TLS e unha compilación de libcurl que o admita.
Faga que a ruta efectiva sexa deliberada
Unha opción de proxy explícita substitúe a configuración de ambiente de proxy correspondente. A omisión é unha decisión aparte: un no_proxy heredado aínda pode excluír o destino. Se este handle debe usar o proxy seleccionado para cada destino que recibe, configure CURLOPT_NOPROXY como unha cadea baleira dentro desa política.
Pola contra, establecer CURLOPT_PROXY nunha cadea baleira desactiva explicitamente o uso do proxy. Establecelo en NULL elimina a asignación explícita e volve permitir o comportamento baseado no ambiente. Eses dous valores serven a propósitos distintos.
Unha cabeceira específica do destino como Content-Type: text/xml non selecciona o proxy. Engádaa só cando o corpo real da solicitude e a API de destino necesiten ese tipo de medio.
Lea tamén o resultado HTTP
Un curl_easy_perform correcto non significa que o sitio web devolvese un estado HTTP correcto. Lea CURLINFO_RESPONSE_CODE e aplique o tratamento de estados da aplicación. A resposta CONNECT do proxy ten o seu propio valor, CURLINFO_HTTP_CONNECTCODE; un rexeitamento do túnel precede calquera resposta do sitio web.
CURLOPT_FAILONERROR pode tratar moitos erros HTTP como fallos, pero a súa documentación sinala excepcións de autenticación. Manteña o desafío 407 do proxy separado do estado do destino.