A opção de proxy do contexto HTTP pertence ao wrapper de fluxo HTTP do PHP. Uma ligação TCP bruta criada por stream_socket_client não se torna um cliente de proxy HTTP só porque essa opção existe num objeto de contexto.

Se o código se liga diretamente ao endereço de destino, está a abrir essa rota TCP. Se se liga ao endereço do proxy em vez disso, os bytes seguintes ainda têm de implementar o protocolo de proxy.

Para HTTP CONNECT, isso significa um anfitrião e uma porta de destino válidos, qualquer autenticação de proxy necessária, análise completa da resposta e aceitação antes de o protocolo de destino começar. Uma única chamada fread à procura de uma frase de sucesso não é um conector completo. O TCP pode dividir uma resposta entre leituras ou devolver bytes adicionais que têm de ser preservados.

Para um destino HTTPS, o TLS tem então de começar através do túnel estabelecido e verificar a identidade do destino. O nome de anfitrião do proxy não é a identidade do certificado do sítio web.

Use um cliente ou conector com suporte documentado para o protocolo de proxy necessário quando a tarefa é simplesmente obter um URL. As configurações HTTP e SOCKS do PHP cURL oferecem um caminho suportado para obter um URL. Um fluxo bruto é útil quando a aplicação assume esse trabalho de protocolo de nível inferior; não deve herdar silenciosamente pressupostos de um exemplo de wrapper HTTP não relacionado.

Artigos relacionados