使用证书示例
$url = 'https://www.domain.com';
$post_data = array(
'k1' => 'v1',
'k2' => 'v2',
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); // 目标地址
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 3); // 尝试连接目标地址最大等待时间
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // curl操作最长执行时间
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true); // 验证证书
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 检查公用名是否存在,并且是否与提供的主机名匹配
curl_setopt($curl, CURLOPT_CAINFO, getcwd() . 'cacert.pem'); // 保存着多个CA证书的目录
curl_setopt($curl, CURLOPT_POST, true); // POST
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); // POST数据
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 输出原生内容
$result = curl_exec($curl);
curl_close($curl);
其中cacert.pem文件地址:https://curl.haxx.se/ca/cacert.pem。将此文件保存到本地,将CURLOPT_CAINFO设置为此文件的绝对路径,或者在php.ini里面设置此文件路径curl.cainfo=/path/to/cacert.pem。
对于https连接建议不要使用无证书的curl。
php官网里面有一哥们撕心呐喊:
无证书示例
$url = 'https://www.domain.com';
$post_data = array(
'k1' => 'v1',
'k2' => 'v2',
);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url); // 目标地址
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 3); // 尝试连接目标地址最大等待时间
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // curl操作最长执行时间
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 验证证书
// curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 检查公用名是否存在,并且是否与提供的主机名匹配
// curl_setopt($curl, CURLOPT_CAINFO, getcwd() . 'cacert.pem'); // 保存着多个CA证书的目录
curl_setopt($curl, CURLOPT_POST, true); // POST
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); // POST数据
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 输出原生内容
$result = curl_exec($curl);
curl_close($curl);