Я получаю ошибку об отказе в разрешении при попытке сделать запрос cURL с библиотекой php cURL на localhost на порту 4321. Надеюсь, это будет действительно легко или очевидно для тех, кто сталкивался с этим раньше.
Я могу сделать такой же запрос cURL из другой системы в локальной сети на производственный сервер. Например, если в другой системе в локальной сети я делаю запрос, используя функцию ниже, где $host='http://192.168.1.100:4321'
тогда все работает точно так, как должно. Если я запускаю на самой системе, где $host='http://localhost:4321'
или же $host='http://127.0.0.1:4321'
или же $host='::1:4321'
тогда я получаю ошибку cURL «Отказано в доступе»
Функция, которую я написал для моего очень простого запроса:
function makeRequest($host,$data){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $host);
curl_setopt($ch,CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = json_decode(curl_exec($ch),true);
if(!empty(curl_error($ch))){
$result = print_r(curl_error($ch).' - '.$host);
}
curl_close($ch);
return $result;
}
Система является сервером Centos 7. Бег firewall-cmd --list-all
показывает мои открытые порты
ports: 443/tcp 80/tcp 4321/tcp
Если у вас есть идея, или вам нужно, чтобы я проверил настройки, не стесняйтесь спрашивать.
РЕДАКТИРОВАТЬ
Файл hosts выглядит так
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
EDIT2
Когда я использую командную строку curl против того же порта, все возвращается на круги своя.
/]$ curl -v localhost:4321
* About to connect() to localhost port 4321 (#0)
* Trying ::1...
* Connected to localhost (::1) port 4321 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost:4321
> Accept: */*
>
< HTTP/1.1 200 OK
< Accept-Ranges: bytes
< Cache-Control: no-cache, no-store, must-revalidate
< Content-Length: 774....
Я нашел ответ на проблему по адресу:
Получение доступа запрещено при публикации XML с использованием Curl?
Проблема в SELinux, а решение — запустить
user@host /]$ sudo setsebool httpd_can_network_connect=1
Для меня не имеет смысла, что я мог бы использовать библиотеку php cURL для доступа к любому другому веб-сайту в мире, но не к localhost через другой порт, в то время как я смог получить доступ к localhost из командной строки cURL.
Других решений пока нет …