Mantener una cookie de proxy en la solicitud CONNECT
Utilice la interfaz separada de encabezados de proxy de libcurl para un inicio de sesión CONNECT definido por el proveedor, en lugar de tratar una cookie de destino como autenticación de proxy.
Algunos productos de proxy definen un flujo de inicio de sesión que proporciona una cookie o un token para solicitudes de proxy posteriores. Si ese token debe aparecer en CONNECT, manténgalo separado de las cookies destinadas al sitio web dentro del túnel.
libcurl ofrece una lista dedicada de encabezados personalizados para el proxy. En una aplicación C ya inicializada, un fragmento de configuración puede verse así:
struct curl_slist *proxy_headers = NULL;
proxy_headers = curl_slist_append(proxy_headers,
"Cookie: ProxySession=REPLACE_WITH_PROXY_TOKEN");
curl_easy_setopt(handle, CURLOPT_PROXYHEADER, proxy_headers);
curl_easy_setopt(handle, CURLOPT_HEADEROPT,
(long) CURLHEADER_SEPARATE);Esto solo es adecuado cuando el protocolo de inicio de sesión documentado del proxy exige ese encabezado. Compruebe los resultados de asignación y de opciones en el código circundante, conserve la lista hasta que la transferencia haya terminado y, después, borre o sustituya el puntero del identificador antes de liberar la lista.
Con el manejo separado de encabezados, libcurl envía la lista de proxy en CONNECT y la lista de destino en la solicitud dentro del túnel establecido. Así, el proxy recibe el token del proveedor sin que ese token se convierta en una cookie del sitio web. Esta separación es la predeterminada desde libcurl 7.42.1; la opción explícita hace visible el comportamiento previsto.
Un tarro de cookies del navegador es otro mecanismo
Habilitar el motor de cookies de libcurl o establecer una cookie para el destino no reproduce automáticamente el flujo de inicio de sesión de proxy propietario de un navegador. CONNECT ocurre antes del intercambio HTTPS con el destino. Identifique los requisitos reales del producto en lugar de copiar una cookie de sitio capturada en cada solicitud.
Si el proxy utiliza autenticación de proxy HTTP estándar, use en su lugar las credenciales de proxy de libcurl y las opciones de autenticación compatibles. Un 407 con Proxy-Authenticate es un protocolo distinto de una página de inicio de sesión HTML que devuelve un token de sesión.
Mantenga el token limitado a su extremo de proxy y a su vida útil prevista. Al cambiar a otro intermediario, sustituya la lista de encabezados como parte de ese cambio de configuración. Una lista general de encabezados de solicitud es un mal lugar para un secreto que pertenece solo a un proxy.