HTTP-проксі-контекст PHP не перелаштовує необроблений TCP-потік
Відрізняйте параметри проксі HTTP-обгортки PHP від протокольної роботи, потрібної для TCP-з'єднання stream_socket_client.
Параметр проксі контексту HTTP належить HTTP-обгортці потоку PHP. Необроблене TCP-з'єднання, створене stream_socket_client, не стає клієнтом HTTP-проксі лише тому, що цей параметр існує в об'єкті контексту.
Якщо код підключається безпосередньо до адреси призначення, він відкриває цей TCP-маршрут. Якщо ж він підключається до адреси проксі, наступні байти все ще мають реалізувати протокол проксі.
Для HTTP CONNECT це означає дійсний хост і порт призначення, будь-яку потрібну автентифікацію проксі, повний розбір відповіді та прийняття до початку протоколу призначення. Один виклик fread, що шукає фразу успіху, не є повним з'єднувачем. TCP може розділити відповідь між читаннями або повернути додаткові байти, які потрібно зберегти.
Для призначення HTTPS протокол TLS потім має початися через установлений тунель і перевірити ідентичність призначення. Ім'я хоста проксі не є ідентичністю сертифіката вебсайту.
Використовуйте клієнт або з'єднувач із документованою підтримкою потрібного протоколу проксі, коли завдання — просто отримати URL. Налаштування HTTP і SOCKS у PHP cURL дають один підтримуваний шлях отримання URL. Необроблений потік корисний, коли програма сама бере на себе цю протокольну роботу нижчого рівня; він не повинен мовчки успадковувати припущення з не пов'язаного прикладу HTTP-обгортки.