PHP Guzzle 5: Не удается обработать URL-адрес с номером ПОРТА в нем
Я использую последнюю версию guzzle.
(from composer.json)
"guzzlehttp/guzzle": "~5"
(from composer.lock)
"name": "guzzlehttp/guzzle",
"version": "5.2.0",
Когда я пытаюсь запросить (ПОЛУЧИТЬ или ОПУБЛИКОВАТЬ) URL-адрес, содержащий номер ПОРТА:
$response = $client->get('http://www.hostdnshere.com:8888', array());
Я получаю следующую ошибку:
string(68) "cURL error 7: Failed to connect to 000.000.000.000: Permission denied"
Когда я делаю то же самое, но опускаю ПОРТ:
$response = $client->get('http://www.hostdnshere.com', array());
Запрос выполняется успешно без проблем. Я просмотрел документацию и поискал в Интернете, но не могу узнать, как установить порт для хоста, так как он не может быть включен.
Кроме того, я протестировал все это с помощью Завиток на форме сервера, на который отправляются запросы, с ПОРТОМ и без него, работает как заклинание, несмотря ни на что, поэтому я знаю, что это не проблема с сервером, DNS, прокси-серверами или ПОРТАМИ.
1 answers
Для всех тех, кто бьется головой о стену из-за
"cURL error 7: Failed to connect to 000.000.000.000: Permission denied"
Ошибка, все сводится к "SELINUX". Это верно, на любую оболочку CURL, написанную на любом языке программирования, может повлиять тот факт, что, когда для "SELINUX" установлено значение "принудительное исполнение", возникает проблема с выполнением CURL по URL-адресу, в котором есть нестандартный ПОРТ (т.Е. my.domain.com:8888).
Рекомендуется только для локальной разработки, если вы хотите использовать нестандартные ПОРТЫ в своем URL-адресе, это установить "СЕЛИНУКС" - "отключен". Правильным решением в производстве будет использование чистых URL-адресов без портов в них, чтобы оставить "SELINUX" включенным.
Открыть:
nano /etc/selinux/config
Найдите:
SELINUX=enforcing
Изменение:
SELINUX=disabled
Те, кто использует CentOS, скорее всего, столкнутся с этой проблемой, так как "SELINUX" по умолчанию настроен на "принудительное исполнение".