关于封装curl遇到的坑

   

 /**
     * curl方法
     * @author shim
     * @param $curl 地址
     * @param $method 发送数据方式
     * @param $data  发送数据类容
     * @param $dataType 是否将数据转为json字符串处理或序列化
     */
    function curlRequest($curl, $method = 'GET', $data = null, $dataType = 'ARRAY')
    {
        if (strtoupper($dataType) == 'JSON')
        {
            $data = json_encode($data);
        }
        elseif (strtoupper($dataType) == 'SER')
        {
            $data = serialize($data);
        }
        $ch = curl_init (); // 初始化curl
        curl_setopt ( $ch, CURLOPT_URL, $curl ); // 设置访问的 URL
        curl_setopt ( $ch, CURLOPT_HEADER, false ); // 放弃 URL 的头信息
        curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true ); // 返回字符串,而不直接输出
        curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false ); // 不做服务器的验证
    
        //是否为HTTPS请求
        if (strpos ( $curl, "https://" ) !== false)
        {
            curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, 2 ); // 做服务器的证书验证
        }
        else
        {
            curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, false ); // 做服务器的证书验证
        }
        if (strtoupper($method) == 'POST')
        { // 是否是 POST 请求
            curl_setopt ( $ch, CURLOPT_POST, true ); // 设置为 POST 请求
            curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data ); // 设置POST的请求数据
        }
        $content = curl_exec ( $ch ); // 开始访问指定URL
        curl_close ( $ch ); // 关闭 cURL 释放资源
        return $content;
    }

用上面的方法报错:Request Entity Too Large;does not allow request data with POST requests, or the amount of data provided in the request exceeds the capacity limit.代码如下

        $data = array(1, 2, 3, 4, 5);
        $rs = curlRequest($url, 'POST', $data);
        var_dump($rs);

故修改:

        $data = array(1, 2, 3, 4, 5);
        $rs = curlRequest($url, 'POST', $data, 'JSON');
        var_dump($rs);

接收数据代码

$rs = file_get_contents('php://input','r');
var_dump($rs);

但是post的数据用key=>val 不报错:

        $data = array(
            'name' => 'shim',
            'age' => 22
        );
        $rs = curlRequest($url, 'POST', $data);

直接用$_POST就可以接收。


造成的原因暂时还没搞清楚。

你可能感兴趣的:(关于封装curl遇到的坑)