有些时候,服务端接口虽然开启了https,但是域名ssl证书无法正常使用,这个时候客户端就要取消ssl验证了,不然莫名其妙的没有任何响应,http状态码却是0.

        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, 'https://xxx.com');
        //curl_setopt($curl,CURLINFO_HEADER_OUT,true);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_HTTPHEADER, [
            'host:xxx.com',
            'content-type:application/json',
            'authorization:xxx',
        ]);
        //客户请求方法,比如使用PUT时就需要改写,除了POST和GET可以不需要这个设置
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST');
        //POST请求
        curl_setopt($curl, CURLOPT_POST, 1);
        //传输数据或者文件,
        curl_setopt($curl, CURLOPT_POSTFIELDS, xxx);
        //返回响应数据
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
        //取消ssl验证
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);

        $response = curl_exec($curl);
        $status = curl_getinfo($curl);
        if ($status == 0) {
            $response= false;
        }
        curl_close($curl);
        return $response;

注意,

CURLOPT_SSL_VERIFYPEER和CURLOPT_SSL_VERIFYHOST都必须设为false

作者 赵文明

发表回复