/** * Composes HTTP request CUrl options, which will be merged with the default ones. * @param string $method request type. * @param string $url request URL. * @param mixed $params request params. * @return array CUrl options. * @throws Exception on failure. */ protected function composeRequestCurlOptions($method, $url, $params) { $curlOptions = []; switch ($method) { case 'GET': $curlOptions[CURLOPT_URL] = $this->composeUrl($url, $params); break; case 'POST': $curlOptions[CURLOPT_POST] = true; $curlOptions[CURLOPT_POSTFIELDS] = is_array($params) ? !parent::paramsHaveFile($params) ? http_build_query($params, null, '&', PHP_QUERY_RFC3986) : $params : $params; break; case 'HEAD': $curlOptions[CURLOPT_CUSTOMREQUEST] = $method; if (!empty($params)) { $curlOptions[CURLOPT_URL] = $this->composeUrl($url, $params); } break; default: $curlOptions[CURLOPT_CUSTOMREQUEST] = $method; if (!empty($params)) { $curlOptions[CURLOPT_POSTFIELDS] = $params; } } return $curlOptions; }