curl在请求https的链接时的处理
1、不验证证书和host
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
2、设定一个正确的证书。
下载新的ssl 本地判别文件http://curl.haxx.se/ca/cacert.pem
放到 程序文件目录
curl 增加下面的配置
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true); ;
curl_setopt($ch,CURLOPT_CAINFO,dirname(__FILE__).'/cacert.pem');
不要用getcwd()来取当前目录,在lunux下会有权限问题
使用dirname(__FILE__)
private function call($xml,$url) {
//启动一个CURL会话
$ch = curl_init();
// 设置curl允许执行的最长秒数
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
// 证书
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false) ;
curl_setopt($ch,CURLOPT_SSLCERT,dirname(__FILE__).'/wxcert/apiclient_cert.pem');
curl_setopt($ch,CURLOPT_SSLKEY,dirname(__FILE__).'/wxcert/apiclient_key.pem');
curl_setopt($ch,CURLOPT_CAINFO,'./wxcert/rootca.pem');
// 获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
//发送一个常规的POST请求。
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
//要传送的所有数据
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
// 执行操作
$res = curl_exec($ch);
$Code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($res == NULL) {
file_put_contents("./logs/text.txt","call http err :" . curl_errno($ch) . " - " . curl_error($ch) . PHP_EOL,FILE_APPEND);
curl_close($ch);
return false;
} else if($Code != "200") {
file_put_contents("./logs/text.txt","call http err httpcode=" . $Code . PHP_EOL,FILE_APPEND );
curl_close($ch);
return false;
}
curl_close($ch);
return $res;
}
curl在请求https的链接时的处理
最新推荐文章于 2024-05-31 19:05:24 发布