/** * 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就可以接收。
造成的原因暂时还没搞清楚。