CentOS Stream 9与Apache 2.4.57和PHP 8.2.6,cURL 7.76.1在PHP中不工作,但通过控制台工作

uajslkp6  于 12个月前  发布在  Apache
关注(0)|答案(1)|浏览(175)

我有一个运行CentOS Stream 9的服务器,它使用Apache 2.4.57和PHP 8.2.6。
cURL 7.76.1已启用并通过phpinfo()确认,但当我使用php发出cURL请求时,返回空值并抛出错误。但是,如果我通过终端使用curl来发出同样的请求,它会毫无问题地获得内容。
我已经试着弄清楚了一段时间了,任何帮助都会非常感激。

下面是我的test.php文件:

<?php
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://catfact.ninja/fact");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);

if ($errno = curl_errno($ch)) {
    $error_message = curl_strerror($errno);
    echo "cURL error ({$errno}):\n {$error_message}";
}

curl_close($ch);
echo $result;

输出:

cURL error (7): Couldn't connect to server

下面是我在控制台运行的代码:

[user@server ~]$ curl https://catfact.ninja/fact

输出:

{"fact":"The average litter of kittens is between 2 - 6 kittens.","length":55}
yhxst69z

yhxst69z1#

最后发现了这个问题-- SELinux阻止了这个请求。
作为一种解决方案,我可以在cURL中设置一个代理,或者检查是否启用了SELinux httpd_can_network_connect。通过运行getsebool -a | grep httpd进行检查您可以通过运行$ setsebool httpd_can_network_connect 1启用它
请考虑允许httpd_can_network_connect的安全实现,我不会在这里讨论。我希望这对别人有帮助!

相关问题