如题,curl各种操作,封装为一个方法,一劳永逸
话不多说,直接上代;不能使用,提棍找我
<?php /** * 发送http请求 * @param string $url 请求地址 * @param string $method http方法(GET POST PUT DELETE) * @param array $data http请求数据 array|string * @param array $header http请求头 * @param Int $type 请求数据类型 0-字符串 1-json 2-array * @param Int $synchronous 请求数据类型 0-异步 1-同步 * @return string|bool */ function send_request($url = '', $method = "POST", $data = array(), $header = array(), $type = 1, $synchronous = 1) { //控制请求方法范围 $httpMethod = array('GET', 'POST', 'PUT', 'DELETE'); $method = strtoupper($method); if (!in_array($method, $httpMethod)) { return false; } //请求头初始化 $request_headers = array(); $User_Agent = 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31'; $request_headers[] = 'User-Agent: '. $User_Agent; if($header){ foreach ($header as $v) { $request_headers[] = $v; } } $request_headers[] = 'Accept: text/html,application/json,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'; switch ($method) { case "POST": $request_headers[] = "X-HTTP-Method-Override: POST"; break; case "PUT": $request_headers[] = "X-HTTP-Method-Override: PUT"; break; case "DELETE": $request_headers[] = "X-HTTP-Method-Override: DELETE"; break; default: if($data) { //GET请求 $url = $url . '?' . http_build_query($data); } } //发送http请求 $ch = curl_init(); if(!$synchronous) { //异步 curl_setopt($ch, CURLOPT_TIMEOUT, 1);//设置超时时间为1秒,超过1秒则关闭连接 curl_setopt($ch, CURLOPT_NOSIGNAL, 1); //注意,毫秒超时一定要设置这个 cURL 7.10时被加入 curl_setopt($ch, CURLOPT_TIMEOUT_MS, 300); //超时毫秒,cURL 7.16.2中被加入 }else{ //curl_setopt($ch, CURLOPT_TIMEOUT, 35); // 最大执行时间 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120); // 在尝试连接时等待的秒数,等待3s没有连接成功就断开 } curl_setopt($ch, CURLOPT_URL, $url); // 要访问的地址 curl_setopt($ch, CURLOPT_HEADER, 0);// 设置是否显示返回头信息 1返回 0不返回 调试开启 curl_setopt($ch, CURLOPT_NOBODY, 0); //不想在输出中包含body部分,设置这个选项为一个非零值 curl_setopt($ch, CURLOPT_AUTOREFERER, 1); // 自动设置Referer curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//获取的信息以文件流的形式返回 curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE); //在启用CURLOPT_RETURNTRANSFER的时候,返回原生的(Raw)输出。 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//https 不进行ssl验证 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers);//设置头信息 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method); //设置请求方式 if($method == 'POST'){ curl_setopt($ch, CURLOPT_POST, TRUE); } if($method != 'GET'){ //格式化发送数据 if($data) { if(is_array($data)) { if ($type == 0) { //supportkb 接口需要 $dataValue = http_build_query($data); } elseif ($type == 1) { $dataValue = json_encode($data, JSON_UNESCAPED_UNICODE); }else{ //post 数组 $dataValue = $data; } }else{ $dataValue = $data; } } if(!empty($dataValue)) { curl_setopt($ch, CURLOPT_POSTFIELDS, $dataValue); } } //发送请求获取返回响应 $result['data'] = curl_exec($ch); $result['httpCode'] = curl_getinfo($ch,CURLINFO_HTTP_CODE); if(strlen(curl_error($ch))>1){ $result = false; } curl_close($ch); return $result; } ?>