Помогите, пожалуйста, найти корень проблемы. Работаю через прокси сервер. Испробовал уже почти все прогугленные способы(от задания переменных среды до написания адресов прокси в самом PHP), ничего не помогло. Проблема возникает при запросе каких-либо внешних ресурсов. Запрос даже не посылается с компьютера. Заранее всем спасибо за содействие.
У тебя интернет через proxy, и ты хочешь чтобы в PHP был интернет? Какой тип proxy? Как указываешь в PHP? Как настроено в ОС? Windows или что-то другое?
Для начала спросить хочу, как вообще выглядит затея работы с php через proxy, стоит ли вообще затевать эту историю? Одноразовый костыль это всё-таки не решение
Тут понятие proxy много что может означать. Как замок для двери и замок строение. Ты не отвечаешь на уточняющие вопросы. Почему ждёшь тогда ответа? Работай с proxy всё отлично.
Стоит http proxy, в php пробовал указать в отдельных функциях(file_get_contents к примеру) третьим параметром, ОС windows, под вопросом как настроено можно чуть подробнее? Я по знаниям proxy серверов 0 --- Добавлено --- Стоит http proxy, в php пробовал указать в отдельных функциях(file_get_contents к примеру) третьим параметром, ОС windows, под вопросом как настроено можно чуть подробнее? Я по знаниям proxy серверов 0
Эту https://github.com/nodejitsu/node-http-proxy используешь? Эта первая ссылка из google по http proxy
На работе компьютер к интернету подключен через прокси сервер. Мне соответственно при работе с различными фреймворками часто приходится через php обращаться к внешним ресурсам (Например, скопирую команду: php -r "file_put_contents('symfony', file_get_contents('https://symfony.com/installer'));"). Тут и загвоздка, все внешние запросы обрываются на данной ошибке. Вот и ищу подходящий способ для решения этой проблемы. Кстати и локальный сервер (OpenServer) конфликтует при работе через прокси, был бы рад если бы кто-нибудь подсказал где на локальном сервере соответствующие настройки прописать.
Вот уже понятнее стало. Какая proxy? Может только http и у тебя отсутствует доступ в интернет по https, sockets через proxy. Обычно настроить сервер и нормально с ним работать, нужно иметь навыки администрирования и изучить возможности apache, nginx, mysql, php в плане настройки. На это нужно время. По этому проще взять хостинг с SSH и тренироваться, а уже потом самому всё настраивать. Ещё на Windows всё может не так как надо работать, мало кто гарантирует правильную работу скриптов на Windows, потому что всё обычно под Linux работает. Тут можно в virtualbox поставить turnkeylinux, но всё равно придётся разбираться с администрированием сервера linux. Поищи программы которые помогают другим программам работать через proxy/socks если они этого не умеют. Можно поискать по словам: Соксификация программ Ты так и не ответил, какой у тебя тип прокси, это http only proxy, http/https proxy, socks 4/5
Прокси: squid/3.5.14. Пробовал задавать прокси и через переменные среды и через stream_context_create() и с помощью curl(). Всё та же ошибка. 1. Создал переменные среды HTTP_PROXY и HTTPS_PROXY (и в пользовательских и в системных, записал значение "tcp:172.16.100.100:3128") - не помогло. 2. Код PHP: $aContext = array( 'https' => array( 'proxy' => 'tcp://172.16.100.100:3128', 'request_fulluri' => true, ), ); $cxContext = stream_context_create($aContext); поместил в файлик, подключил через auto_prepend_file в php.ini. Помещаю переменную третьим параметром в file_get_contents() - не помогло 3. Создаю в корне файл с функцией: PHP: function file_get_contents_curl($url) { $proxy = "172.16.100.100:3128"; $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_PROXY, "$proxy"); $data = curl_exec($ch); curl_close($ch); return $data; } Подсоединив, вызываю функцию, к примеру file_get_contents_curl('https://symfony.com/installer')) - не помогло. Подскажите, может я где ошибся или есть другие рабочие варианты? Спасибо
http://stackoverflow.com/questions/...p-to-use-proxy-setting-to-connect-to-internet НО! Если твой локальный (ты же на локалке это выполняешь) файервол не одобряет соединение, то никакие настройки в среде PHP не помогут. попробуй временно выключить файервол и сконнектиться из консоли. Кроме того, адреса с https могут обламываться если в твой локальный php не включен модуль openssl. Вызови phpinfo() и поищи там SSL.
А вообще чем-то кроме браузера ты можешь обратиться к нужному адресу? Попробуй консольные wget и curl. Если да, то проверь https://php.ru/manual/filesystem.configuration.html#ini.allow-url-fopen --- Добавлено --- И, извини за занудство, но браузер и php ты точно на одном и том же хосте запускаешь? А то всякие варианты можно придумать )))
Я через консоль и вызывал (php -r): cURL error (56): Failure when receiving data from the peer allow_url_fopen тоже включен
Ответ неправильный. Я имел в виду curl — консольную утилиту, а не библиотеку php. То, что пыха запускается в консоли это и так очевидно. Как насчет ответов? Где запускаешь пыху? Какая ОС? Чем кроме браузера проверял доступность ресурсов?
Грубо говоря, кроме как в браузере, ресурсы вообще нигде не доступны) На счет запуска php не понял, а так входит в пакет OpenServer-a. ОС - Windows7
*дцать коментариев назад: КЛЕЩАМИ ПРИХОДИТСЯ ИЗ ТЕБЯ ТЯНУТЬ. пусть кто-нибудь другой пытается, я уже истощён. безнадега.
Извини ) Да на одном хосте запускается. Кстати уже что-то прояснилось при методе создания контекста для https используется протокол ssl, я это не учел. tcp используется с http. Так вот через tcp если на http обращается, то работает, а через ssl на https не хочет понимать
Очень коротко. В плейне сквид принял запрос клиента в строну таргета, сделал запрос к этому таргету, вернул ответ клиенту. В секуре такое не прокатит, ибо клиент делает запрос с установкой безопасного соединения. В процессе этого запроса устанавливается сеанс безопасной связи. Среди прочего там проверяется каким сертификатом отвечает сервер. Попытка проксировать секур через сквид приводит по идее к следующему: клиент делает запрос, устанавливая безопасное соединение с... не-не, не с таргетом, а со сквидом. Сквид дальше устанавливает секурное соединение с таргетом, получает данные и запихивает их обратно в сокет клиента. Но. Клиент еще на стадии установки соединения поймет что перед ним какой-то хрен моржовый, а не достоверный сайт. Потому что сквид не может ответить пакетом, зашифрованным приватным ключом таргета. Но обязан ответить в зашифрованном виде. Для этих целей он будет использовать самописный сертификат, в котором коммон-нейм не будет соответствовать хосту таргета. Клиент на это поднимет тревогу и разорвет соединение.
Ясно, спасибо. Как тогда поступить в таком случае? Я попробовал разрешить самоподписанные сертификаты через параметры, но никакого воздействия.