PHP 警告:无法打开流:HTTP 请求失败

PHP 警告:无法打开流:HTTP 请求失败

我有两个网络服务器:

www.example.com.ar和 eventos.example.com.ar

我收到如下错误:

[2020 年 9 月 16 日星期三 12:11:30.872792] [php7:warn] [pid 17125] [客户端 xx.yy.226.234:48896] PHP 警告:file_get_contents(https://eventos.example.com.ar/eventos/api/events?month=9&year=1999): 无法打开流:HTTP 请求失败!HTTP/1.1 400 Bad Request\r\n 位于 /var/www/www_example_com_ar/wp-content/plugins/example-plugin/mlc-plugin.php 第 340 行

第 340 行有:

$rest = file_get_contents('https://eventos.example.com.ar/eventos/api/events?month='.$month.'&year='.$year, true);

我已经在运行的同一台主机上使用 curl 进行了测试www.example.com.ar我没有收到这样的错误:

curl -I "https://eventos.example.com.ar/eventos/api/events?month=9&year=1999"
HTTP/1.1 200 OK
Date: Wed, 16 Sep 2020 19:26:05 GMT
Server: Apache/2.4.39 () OpenSSL/1.0.2k-fips
X-DNS-Prefetch-Control: off
X-Frame-Options: SAMEORIGIN
Strict-Transport-Security: max-age=15552000; includeSubDomains
X-Download-Options: noopen
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=utf-8
Content-Length: 37027
ETag: W/"90a3-gzipB01lW17JrEb0GD0k0g2zFow"

我已经安装了:

  • 阿帕奇:httpd-2.4.6-90.el7.centos.x86_64
  • PHP: php73-php-7.3.15-1.el7.remi.x86_64

顺便说一下,我有:

php73 -i | grep allow_url_fopen
allow_url_fopen => On => On

在 CentOS 7.7 上

那么,问题是:是什么导致了这个错误?

答案1

您可以添加ignore_errors => true到您的file_get_contents调用中以获取完整消息。这样会忽略错误消息,但您将能够获取有关正在发生的事情的更多信息。更多信息请点击此处(如果您希望在出现另一个错误时中断它,请不要忘记在之后将其删除。):

https://stackoverflow.com/questions/11475657/ignoring-errors-in-file-get-contents-http-wrapper/11479968#11479968

根据我的经验,此错误可能是因为您的 php 没有根 CA 证书,无法验证 HTTPS 调用。将文件添加cacert.pem到您的实例中并进行配置php.ini即可解决该问题。

https://stackoverflow.com/questions/41772340/how-do-i-add-a-certificate-authority-to-php-so-the-file-function-trusts-certif

无论如何,首先要尝试获取有关错误的更多信息,因为 400 可能意味着几件事。

相关内容