Qual proxy esta requisição PHP cURL usou?
Distinga o proxy configurado, o par conectado e a saída pública observada por um destino.
“Obter o proxy” pode significar três coisas diferentes numa aplicação PHP cURL. Decida qual observação precisa antes de acrescentar outro pedido.
| Pergunta | Onde olhar |
|---|---|
| Que endpoint a aplicação configurou? | A configuração fornecida ao handle |
| Foi usado um proxy nesta transferência? | Informação da transferência, onde suportada |
| Que endereço público viu o site? | Uma observação nesse destino |
Guarde o endpoint escolhido junto ao handle ou ao objeto do pedido. curl_getinfo é uma interface de informação da transferência, não um getter genérico para cada valor CURLOPT atribuído antes. Manter a configuração da aplicação é mais simples do que tentar intercetar chamadas a curl_setopt.
Inspecione a transferência concluída
Após a transferência, o par conectado está disponível através de CURLINFO_PRIMARY_IP. Quando a primeira ligação vai para um proxy, esse par pode ser o endereço do proxy em vez do endereço do site.
$peer = curl_getinfo($ch, CURLINFO_PRIMARY_IP);
$usedProxy = defined('CURLINFO_USED_PROXY')
? curl_getinfo($ch, constant('CURLINFO_USED_PROXY'))
: null;
CURLINFO_USED_PROXY foi adicionado ao libcurl na versão 8.7.0 e é exposto por builds PHP compatíveis. O resultado indica uso de proxy, não o URL completo do proxy escolhido. Se a constante não estiver disponível, o null acima significa que a observação não está disponível, não que o pedido tenha ido diretamente.
Leia estes valores enquanto o handle ainda descreve a operação em causa. Uma ligação falhada pode não dar um endereço de par útil, e um proxy explícito ainda pode ser contornado por uma exclusão aplicável.
Um endpoint de verificação de IP responde à terceira pergunta. A resposta pode descrever uma saída atrás do proxy, enquanto o nome de host configurado resolve para uma entrada diferente. Nenhum dos endereços deve ser substituído pelo outro nas definições da aplicação.