composer安装curl
命令行切入到你的项目目录执行
composer require --prefer-dist linslin/yii2-curl "*"
等待安装即可
安装完之后curl的位置
项目根目录/vendor/linslin
有linslin就是安装成功了
Yii2 使用Curl
1 <?php 2 namespace server\api; 3 4 use yii; 5 use yii\helpers\Json; 6 use linslin\yii2\curl\Curl; 8 /** 9 * API基础类 10 */ 11 class BaseApi 12 { 13 const API_POST = 'POST';//POST 请求 14 const API_GET = 'GET';//GET 请求 15 const API_HEAD = 'HEAD';// HEAD 请求 16 const API_PUT = 'PUT';// PUT 请求 17 const API_DELETE = 'DELETE'; // DELETE 请求 18 19 20 /** 21 * 调用脚本接口 22 * @param $url 请求地址 23 * @param $params 接口参数 24 * @param $type 接口请求方式 25 * @return array ['error' => 1, 'msg' => '错误信息', 'data' => '数据'] 26 */ 27 public function callApi($url, $params, $type = self::API_POST) 28 { 29 30 if (!$url) { 31 return [ 32 'error' => 1, 33 'message' => '脚本请求地址为空', 34 ]; 35 } 36 37 $ret = ['error' => 1]; 38 try { 39 $curl = new Curl(); 40 // 请求方式 41 $curl = $curl->setHeaders([ 42 'Content-Type' => 'application/json', 43 ]); 44 // 设置请求时间120秒 45 $curl->setOption(CURLOPT_TIMEOUT, 120); 46 47 switch ($type) { 48 case self::API_GET: 49 if (!empty($params)) { 50 $url .= '?'.http_build_query($params); 51 } 52 $response = $curl->get($url); 53 break; 54 55 case self::API_POST: 56 $response = $curl->setRawPostData(Json::encode($params))->post($url); 57 break; 58 59 case self::API_PUT: 60 $response = $curl->setRawPostData(Json::encode($params))->put($url); 61 break; 62 63 case self::API_DELETE: 64 $response = $curl->setRawPostData(Json::encode($params))->delete($url); 65 break; 66 67 default: 68 $response = $curl->setRawPostData(Json::encode($params))->post($url); 69 break; 70 } 71 72 $result = $response ? Json::decode($response) : []; 73 if (isset($result['result']) && $result['result'] == 'success') { 74 $ret['error'] = 0; 75 $ret['message'] = isset($result['msg']) ? $result['msg'] : 'successful'; 76 $ret['data'] = isset($result['data']) ? $result['data'] : []; 77 } else { 78 $ret['message'] = isset($result['msg']) ? $result['msg'] : '未知错误'; 79 } 80 } catch (\Exception $e) { 81 $ret['message'] = $e->getMessage().$this->_api_error_msg; 82 } 83 return $ret; 84 } 85 }