Para um handle libcurl existente, separe explicitamente as listas de cabeçalhos de destino e de proxy:

curl_easy_setopt(handle, CURLOPT_HEADEROPT, (long)CURLHEADER_SEPARATE);
curl_easy_setopt(handle, CURLOPT_PROXYHEADER, proxy_headers);
curl_easy_setopt(handle, CURLOPT_HTTPHEADER, origin_headers);

Mantenha o handle configurado e as listas válidas ativos durante a transferência. CURLHEADER_SEPARATE distingue os cabeçalhos usados em CONNECT dos cabeçalhos usados para o pedido de destino. Exemplos antigos de política unificada podem colocar a lista comum nas duas trocas.

Caminho do pedidoSignificado das listas separadas
HTTPS dentro de um túnel CONNECT comumA troca com o proxy vem primeiro; depois os cabeçalhos HTTP de destino seguem dentro do TLS de destino.
Encaminhamento HTTP simplesO proxy pode ler os cabeçalhos de destino, e o libcurl pode usar ambas as listas aplicáveis no único pedido encaminhado.

Um marcador de encaminhamento apenas para o proxy pertence à troca com o proxy. Com encaminhamento em texto simples, um campo personalizado arbitrário pode chegar à origem, a menos que a disposição de encaminhamento o trate; o nome da opção não é garantia de confidencialidade.

Use opções de credenciais suportadas para autenticação. Para metadados definidos pelo operador, determine qual salto os consome e se podem ser encaminhados em vez de colocar uma palavra-passe num campo genérico.

Quando um marcador está ausente ou parece estar a escapar, identifique o pedido real que o contém. Um callback de cabeçalhos que mostra várias trocas pode fazer listas corretamente separadas parecerem misturadas.

Artigos relacionados