Задать вопрос
dima_yakimneko
@dima_yakimneko

Как не ждать ответа от curl в php?

PHP скрипт обращается к API почтовых сервисов через curl, время ответа очень долгое, хотя сам ответ и не нужен. Главное отправить данные.

Из за этого сайт работает медленно, работа curl занимает долгое время.

Как не ждать ответа curl?

//Отправка запроса
private function sendRequest($path, $method = "GET", $data = array(), $useToken = true) {
	$url = $this -> apiUrl . "/" . $path;
	$method = strtoupper($method);
	$curl = curl_init();
	if ($useToken && !empty($this -> token)) {
		$headers = array("Authorization: Bearer ".$this -> token);
		curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
	}
	switch ($method) {
		case "POST":
			curl_setopt($curl, CURLOPT_POST, count($data));
			curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
		break;
		case "PUT":
			curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
			curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
		break;
		case "DELETE":
			curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
			curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
		break;
		default:
			if (!empty($data)) {
				$url .= "?" . http_build_query($data);
			}
		break;
	}

	curl_setopt($curl, CURLOPT_URL, $url);
	curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
	curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_HEADER, 1);

	$response = curl_exec($curl);
	$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
	$headerCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
	$responseBody = substr($response, $header_size);
	curl_close($curl);
	if ($headerCode == 401 && $this -> refreshToken == 0) {
		$this -> refreshToken += 1;
		$this -> getToken();
		$return = $this -> sendRequest($path, $method, $data);
	} else {
		$return = new stdClass();
		$return -> data = json_decode($responseBody);
		$return -> http_code = $headerCode;
	}
	return $return;
}
  • Вопрос задан
  • 1675 просмотров
Подписаться 1 Оценить Комментировать
Ответ пользователя Dimonchik К ответам на вопрос (3)
dimonchik2013
@dimonchik2013
non progredi est regredi
Multicurl тебя спасет

а не жать не получится - это TCP
Ответ написан
Комментировать