get_headers():SSL操作失败,代码为1


get_headers(): SSL operation failed with code 1

嘿,我试着获取url的头信息,

当我使用http协议时,它可以正常工作,但当我使用https时,它不工作

网址:https://200.35.78.130/

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in
Warning: get_headers(): Failed to enable crypto in 
Warning: get_headers(https://200.35.78.130/): failed to open stream: operation failed in /

这是我的代码

print_r(get_headers("https://200.35.78.130/", 1));

当您试图在没有有效SSL证书的情况下访问URL时,会发生此错误。您可以通过覆盖默认的流上下文来解决这个问题,这将影响所有后续的文件操作(包括远程URL)

<?php
stream_context_set_default( [
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
    ],
]);
print_r(get_headers('https://200.35.78.130/'));

或者,如果您使用的是PHP 7.1+,您可以使用stream_context_create创建一个临时上下文,并将其直接传递给函数,以避免覆盖默认值:

$context = stream_context_create( [
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
    ],
]);
print_r(get_headers('https://200.35.78.130/', 0, $context));

感谢Matthijs Wessels在评论中指出这一点。

因为您安装的SSL证书没有中间密钥