O contexto de proxy HTTP do PHP não reconfigura um fluxo TCP bruto
Distinga as opções de proxy do wrapper HTTP do PHP do trabalho de protocolo necessário numa ligação TCP stream_socket_client.
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.