现象:
微信公众号开发或者其他项目当中,要求提交post连接,网上有很标准的post提交方法,但是使用过后总是报错。
后来调试一下才发现是post默认使用ssl连接问题。
方法1 在函数中加入如下代码关闭ssl即可。
// 关闭SSL验证
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
综合tp6中调用函数:
/**
* PHP发送Json对象数据
*
* @param $url 请求url
* @param $jsonStr 发送的json字符串
* @return array
*/
public static function send_post_json($url, $jsonStr)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonStr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 关闭SSL验证
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($jsonStr)
)
);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return array($httpCode, $response);
}
复制后直接使用即可,无脑解决问题。
方法2 配置HTTPS
另外的一种解决办法,就是配置上HTTPS,找到证书:
到http://curl.haxx.se/ca/cacert.pem
下载pem文件。
移动pem文件到一个目录(如d:\phpstudy)
在PHP配置文件(php.ini)里配置PEM文件目录位置。
curl.cainfo = "d:\phpstudy\cacert.pem"
基础参考资料:
基本语法:
https://blog.csdn.net/lengyuezuixue/article/details/86696111
解决方案描述:
https://blog.csdn.net/lilongsy/article/details/85012503