我在运行 Apache 的 Red Hat AWS 服务器上有一个 PHP 脚本:
$url = "https://testsite.com/testfile.txt";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
echo curl_error($ch);
$responseInfo = curl_getinfo($ch);
echo "http_code=".$responseInfo['http_code']."\n".$response."\n";
curl_close($ch);
当我从 SSH 终端运行它时,它可以工作。但如果我在网络浏览器中加载该页面,它会返回“http_code=0”。在这两种情况下,curl_error 都不会返回任何内容。
我需要做什么才能让 CURL 在网络浏览器中工作?
由于没有生成错误,可以假设curl正在工作,但您没有得到期望的结果。
背后可能有不止一个原因 -
首先检查安全组中的出站规则,可能是那里失败了
其次可能是https的原因,尝试使用curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
还要检查 libcurl 是否安装
如果尝试以上3件事不起作用,那么就必须寻找其他可能性。
当您在 RHEL 发行版上运行时,我猜这是一个 SELinux 问题。有关在 RHEL 上为 Apache/httpd 配置 SELinux 的指南可以在此处找到。
将 SELinux 策略设置为“Permissive”可以解决您的问题。 但在这样做之前请先阅读上述链接的含义。 更精细的修复是将 httpd_can_network_connect 的 SELinux 标志设置为“on”。由于这与安全有关,因此请先自行阅读,使用风险自负。 (如果命令失败,请使用 sudo 运行)。
setsebool -P httpd_can_network_connect on