这是我原来用于模拟POST请求的方法:
public function post_para($url,$para) {
$postdata = http_build_query($para);
$opts = array('http' => array( 'method' => 'POST','header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata));
$context = stream_context_create($opts);
$result = file_get_contents($url, false, $context);
print_r($result);
}
结果使用 https 协议时PHP函数file_get_contents()报错:SSL operation failed
原因:
服务器未正确配置好https证书
解决方案:
方案一:
下载https证书到服务器
服务器 下载这个证书,http://curl.haxx.se/ca/cacert.pem
php.ini 配置
openssl.cafile = "/etc/ssl/certs/cacert.pem"//你实际下载证书的路径
重启 php 即可
方案二:
使用cURL 函数处理 https 的参数,获取文件内容
public function post_para_curl($url, $data = null){
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
//这里要使用http_build_query($data),才可以传多维数组
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
方案三:
使file_get_contents()函数跳过https验证
$stream_opts = [
"ssl" => [
"verify_peer"=>false,
"verify_peer_name"=>false,
]
];
$response = file_get_contents("https://xxx.xxx.xxx",false, stream_context_create($stream_opts));
我使用的是第二种cURL的方法,顺便推荐一个可以在线调试PHP代码的网站:PHP代码在线调试