Manter um cookie de proxy no pedido CONNECT
Use a interface separada de cabeçalhos de proxy do libcurl para um login CONNECT definido pelo fornecedor, em vez de tratar um cookie de destino como autenticação de proxy.
Alguns produtos de proxy definem um fluxo de login que fornece um cookie ou token para pedidos de proxy subsequentes. Se esse token tiver de aparecer no CONNECT, mantenha-o separado dos cookies destinados ao site dentro do túnel.
O libcurl fornece uma lista dedicada de cabeçalhos personalizados para o proxy. Numa aplicação C já inicializada, um fragmento de configuração pode ser assim:
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);Isto só é adequado quando o protocolo de login documentado do proxy exige esse cabeçalho. Verifique os resultados de alocação e das opções no código circundante, mantenha a lista até a transferência terminar e, depois, limpe ou substitua o ponteiro do handle antes de libertar a lista.
Com o tratamento separado de cabeçalhos, o libcurl envia a lista de proxy no CONNECT e a lista de destino no pedido dentro do túnel estabelecido. Assim, o proxy recebe o token do fornecedor sem que esse token se torne um cookie do site. Esta separação é a predefinição desde o libcurl 7.42.1; a opção explícita torna visível o comportamento pretendido.
Um frasco de cookies do navegador é outro mecanismo
Ativar o motor de cookies do libcurl ou definir um cookie para o destino não reproduz automaticamente o fluxo de login de proxy proprietário de um navegador. O CONNECT ocorre antes da troca HTTPS com o destino. Identifique os requisitos reais do produto em vez de copiar um cookie de site capturado para cada pedido.
Se o proxy usar autenticação de proxy HTTP padrão, use antes as credenciais de proxy do libcurl e as opções de autenticação suportadas. Um 407 com Proxy-Authenticate é um protocolo diferente de uma página de login HTML que devolve um token de sessão.
Mantenha o token limitado ao seu endpoint de proxy e à vida útil pretendida. Ao mudar para outro intermediário, substitua a lista de cabeçalhos como parte dessa alteração de configuração. Uma lista geral de cabeçalhos de pedido é um mau lugar para um segredo que pertence apenas a um proxy.