当前位置

PHP读取SSL网站URL内容以及头部信息的函数

James Qi 在 2020年3月20日 - 17:42 提交

  PHP升级到7以后直接用file_get_contents和get_headers读取https开头的URL会报错:

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Warning: get_headers(): Failed to enable crypto

Warning: get_headers(): failed to open stream: operation failed

  可以用stream_context_create设置不验证的选项,下面是我写的几个函数:

/**
 * 函数:读取使用SSL证书的网址
 * 输入:$url网址
 * 输出:读取网址获得的内容
 */
function file_get_contents_ssl($url) {
	$stream_opts = [
    "ssl" => [
        "verify_peer"=>false,
        "verify_peer_name"=>false,
		]
	];
	$contents = file_get_contents($url, false, stream_context_create($stream_opts));
	return $contents;
}

/**
 * 函数:读取使用SSL证书的网址headers
 * 输入:$url网址
 * 输出:读取网址获得的数组
 */
function get_headers_ssl($url) {
    $stream_opts = [
        'ssl' => [
            'verify_host' => false,
            'verify_peer' => false,
            'verify_peer_name' => false,
        ],
    ];
	$headers = get_headers($url, 1, stream_context_create($stream_opts));
	return $headers;
}

/**
 * 函数:网址页面是否存在
 * 输入:$url网址
 * 返回:是或者否
 */
function url_exists($url) {
	$array = get_headers_ssl($url);
	if ($array == FALSE) return FALSE;
	if (strpos(json_encode($array),' 200 OK') != FALSE) {
		return TRUE;
	} else {
		return FALSE;
	}
}

  这几个函数就可以在其它地方被调用了。

自由标签:

评论

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。