Opções de autenticação de proxy no PHP cURL
Configure credenciais de proxy com as opções cURL corretas e trate a decodificação de URL do campo combinado sem mudar a autenticação do destino.
A autenticação de proxy tem opções cURL próprias. Definir CURLOPT_USERPWD para login em um site não configura a conta do proxy, e selecionar CURLOPT_HTTPAUTH não escolhe o método de autenticação do proxy.
<?php
$user = 'proxy-user';
$password = getenv('PROXY_PASSWORD');
if ($password === false) {
throw new RuntimeException('Set PROXY_PASSWORD');
}
$ch = curl_init('https://example.com/');
curl_setopt_array($ch, [
CURLOPT_PROXY => 'http://203.0.113.10:8080',
CURLOPT_NOPROXY => '',
CURLOPT_PROXYUSERPWD =>
rawurlencode($user) . ':' . rawurlencode($password),
CURLOPT_PROXYAUTH => CURLAUTH_BASIC,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 5,
CURLOPT_TIMEOUT => 15,
]);
$body = curl_exec($ch);
if ($body === false) {
throw new RuntimeException(curl_error($ch), curl_errno($ch));
}
echo curl_getinfo($ch, CURLINFO_RESPONSE_CODE), PHP_EOL;
Substitua o IP de documentação e use as credenciais fornecidas para esse proxy. Basic foi escolhido de propósito neste exemplo; use o método aceito e aprovado para seu serviço, sem presumir que todo ponto precisa dele.
O campo combinado tem uma regra de codificação
A libcurl documenta que CURLOPT_PROXYUSERPWD faz a decodificação de URL do usuário e da senha. O exemplo codifica cada componente antes de uni-los com o delimitador. Isso importa quando uma sequência literal de porcentagem ou outro caractere especial faz parte das credenciais.
As opções separadas de usuário e senha do proxy aceitam diretamente seus valores:
curl_setopt($ch, CURLOPT_PROXYUSERNAME, $user);
curl_setopt($ch, CURLOPT_PROXYPASSWORD, $password);
Use-as como formato alternativo de credenciais antes de executar a solicitação. Não aplique automaticamente a regra de decodificação do campo combinado a CURLOPT_USERPWD; a libcurl documenta uma diferença.
Mantenha separadas as etapas de autenticação
CURLOPT_PROXYAUTH seleciona autenticação de proxy, enquanto CURLOPT_HTTPAUTH seleciona autenticação HTTP com o destino. Se ambos exigirem login, configure as opções adequadas para cada um em vez de copiar a mesma credencial nos dois locais.
CURLAUTH_ANY permite negociação e pode acrescentar uma troca de desafio e resposta antes da escolha do método. Não prova que as credenciais estão corretas. Adicionar também um cabeçalho Proxy-Authorization manual pode interferir na autenticação da biblioteca.
Credenciais Basic em uma conexão em texto claro com o proxy não são protegidas pelo túnel TLS posterior do site. Confira esse transporte separadamente ao escolher como usar um serviço autenticado.