Я пытаюсь получить содержимое потока через HTTPS, но мне нужно пройти через HTTP-прокси. Я бы не хотел использовать cURL, а скорее использовать fopen с аргументом context .
Дело в том, что я не могу заставить его работать над HTTPS (HTTP работает нормально, хотя).
Это НЕ работает:
$stream = stream_context_create(Array("http" => Array("method" => "GET", "timeout" => 20, "proxy" => "tcp://my-proxy:3128", 'request_fulluri' => True ))); echo file_get_contents('https://my-stream', false, $context);
Эта работа (cURL):
$url = 'https://my-stream'; $proxy = 'my-proxy:3128'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_PROXY, $proxy); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 1); $curl_scraped_page = curl_exec($ch); curl_close($ch); echo $curl_scraped_page;
Кто-нибудь знает, что не так с первой частью кода? если он работает с cURL, должен быть способ заставить его работать с контекстом. Я попытался изменить параметры контекста на кучу разных значений, но не повезло.
Любая помощь будет принята с благодарностью!
Благодарю.
Вы не указали точное сообщение об ошибке, попробуйте добавить ignore_errors => true
. Но если вы получаете 400 Bad Request
от Apache, проблема, с которой вы, вероятно, сталкиваетесь, – это несоответствие заголовка сервера и заголовка узла. Существует также ошибка PHP, связанная с этим: https://bugs.php.net/bug.php?id=63519
Попробуйте выполнить следующее исправление до устранения этой ошибки:
$stream = stream_context_create(array( 'http' => array( 'timeout' => 20, 'proxy' => 'tcp://my-proxy:3128', 'request_fulluri' => true ), 'ssl' => array( 'SNI_enabled' => false // Disable SNI for https over http proxies ) )); echo file_get_contents('https://my-stream', false, $context);