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.

Artigos relacionados