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