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

18

嘿,我试图获取URL的头部信息,当我使用http协议时,它工作得很好,但是当我使用https时就不起作用了。

URL: 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));
2个回答

37

当您尝试访问没有有效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指出这一点。


1
真厉害,只用了5分钟就得到了你需要的答案。 - Dan Searle
3
在PHP7中,get_headers函数现在也可以选择将上下文作为参数传入。您可以使用stream_context_create函数来创建上下文。 - Matthijs Wessels
1
对于任何想要使用自签名 SSL 证书但又不想禁用 SSL 验证的人,请查看此答案。 - Fabien Snauwaert

-2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接